मेरे पास डीईआर प्रारूप में एक निजी कुंजी है। मैं इसे पीईएम में बदलने की कोशिश कर रहा हूं और साथ ही पासफ़्रेज़ के साथ निजी कुंजी को एन्क्रिप्ट कर रहा हूं।

यहां ओपनएसएल कमांड है जिसका उपयोग मैं कन्वर्ट और एन्क्रिप्ट करने के लिए कर रहा हूं:

> openssl rsa -aes256 -inform der -in temp_key.der -outform pem -passout pass:<password>

मैं पाइथन में एक समान तर्क लागू करने की कोशिश कर रहा हूं जहां मेरे पास डीईआर प्रारूप में कुंजी इन-मेमोरी के लिए डेटा है। मैं इसे पीईएम में बदलना चाहता हूं, इसे एन्क्रिप्ट करना चाहता हूं और फिर फाइल में स्टोर करना चाहता हूं।

मैं पाइथन की क्रिप्टो लाइब्रेरी से बहुत अच्छी तरह वाकिफ नहीं हूं और मुझे अपने मुख्य डेटा को बदलने और एन्क्रिप्ट करने का सही तरीका जानने में मुश्किल हो रही है।

1
Amriteya 29 जुलाई 2019, 19:02

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-----...
3
antonku 31 जुलाई 2019, 11:12

अजगर के लिए क्रिप्टोग्राफी मॉड्यूल का इस्तेमाल किया यह वह कार्यान्वयन है जिस पर मैं पहुंचा

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"))
1
Amriteya 31 जुलाई 2019, 18:10

अन्य दोनों उत्तर आपके काम आएंगे। विशुद्ध रूप से विविधता के लिए, मैं अपना जोड़ूंगा। आरएसए के लिए, मैं व्यक्तिगत रूप से 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 क्रमशः।

1
Legorooj 17 सितंबर 2020, 11:25