मेरे पास डीईआर प्रारूप में एक निजी कुंजी है। मैं इसे पीईएम में बदलने की कोशिश कर रहा हूं और साथ ही पासफ़्रेज़ के साथ निजी कुंजी को एन्क्रिप्ट कर रहा हूं।
यहां ओपनएसएल कमांड है जिसका उपयोग मैं कन्वर्ट और एन्क्रिप्ट करने के लिए कर रहा हूं:
> openssl rsa -aes256 -inform der -in temp_key.der -outform pem -passout pass:<password>
मैं पाइथन में एक समान तर्क लागू करने की कोशिश कर रहा हूं जहां मेरे पास डीईआर प्रारूप में कुंजी इन-मेमोरी के लिए डेटा है। मैं इसे पीईएम में बदलना चाहता हूं, इसे एन्क्रिप्ट करना चाहता हूं और फिर फाइल में स्टोर करना चाहता हूं।
मैं पाइथन की क्रिप्टो लाइब्रेरी से बहुत अच्छी तरह वाकिफ नहीं हूं और मुझे अपने मुख्य डेटा को बदलने और एन्क्रिप्ट करने का सही तरीका जानने में मुश्किल हो रही है।
3 जवाब
आप एक डीईआर कुंजी लोड कर सकते हैं और इसे क्रिप्टोग्राफी मॉड्यूल की सहायता से पासवर्ड से सुरक्षित PEM कुंजी के रूप में डंप कर सकते हैं: :
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
private_key = serialization.load_der_private_key(
der_data, # assuming that "der_data" variable contains your DER key
password=None,
backend=default_backend()
)
pem_encrypted = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.BestAvailableEncryption(b'mypassword')
)
print(pem_encrypted.decode()) # -----BEGIN ENCRYPTED PRIVATE KEY-----...
अजगर के लिए क्रिप्टोग्राफी मॉड्यूल का इस्तेमाल किया यह वह कार्यान्वयन है जिस पर मैं पहुंचा
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.serialization import load_der_private_key
from cryptography.hazmat.primitives import serialization
key = load_der_private_key(
der_data, password=None, backend=default_backend())
password_protected_key = key.private_bytes(encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.BestAvailableEncryption("password"))
अन्य दोनों उत्तर आपके काम आएंगे। विशुद्ध रूप से विविधता के लिए, मैं अपना जोड़ूंगा। आरएसए के लिए, मैं व्यक्तिगत रूप से PyCryptodome
का उपयोग करना पसंद करता हूं, क्योंकि जब आरएसए सिफर की बात आती है तो इसमें और अधिक सुविधाएं होती हैं, और इसका आरएसए इंस्टेंस शुद्ध पायथन में प्रोग्राम किया जाता है।
यह कोड आपके लिए काम करना चाहिए:
from Crypto.PublicKey import RSA
key = RSA.import(open('key.der', 'rb').read())
with open('key.pem', 'wb') as f:
pem_key = key.export_key(passphrase='password')
f.write(pem_key)
f.close()
यदि आप चाहते हैं, तो आप निर्यात की गई कुंजी का आउटपुट स्वरूप निर्दिष्ट कर सकते हैं, लेकिन PyCryptodom वर्तमान में PEM के लिए डिफ़ॉल्ट है।
आप दोनों पुस्तकालयों के लिए https://cryptography.io और https://pycryptodome.readthedocs.io क्रमशः।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।