Как создать сериализацию PEM для открытого ключа RSA/DSA
используя PyCrypto, я смог создать общедоступную и частную сериализацию PEM для ключа RSA, но в PyCrypto класс DSA не имеет метода exportKey ().
пытаясь PyOpenSSL я смог создать частную сериализацию PEM для ключей RSA и DSA, но нет криптографии.метод dump_publickey в PyOpenSSL.
Я ищу предложение о том, как генерировать сериализацию PEM для ключей RSA и DSA.
большое спасибо!
PS: между тем Я изменил код PyOpenSSL, чтобы также экспортировать метод dump_privatekey для crypto API. PyOpenSSL баг и патч можно найти на: https://bugs.launchpad.net/pyopenssl/+ошибка/780089
Я уже использовал Twisted.поэтому я решил эту проблему, вручную создав ключ DSA/RSA с помощью PyCrypto, а затем инициализируя twisted.раковина.тсс.ключ.Ключ с помощью этого ключа. Класс Key из Conch предоставляет метод toString для сериализации строк.
1 ответов
неясно, для чего вы это делаете, но если все, что вам нужно, это закрытый ключ DSA, совместимый с openssl, вы должны просто следовать openssl ДСА(1) страница руководства:
параметр DER с закрытым ключом использует кодированная форма ASN1 DER ASN .Один Последовательность, состоящая из значений версия (в настоящее время ноль), p, q, g, компоненты открытого и закрытого ключей соответственно как ASN .1 целое число.
Это пример того, как экспорт / импорт закрытых ключей DSA в формате openssl:
from Crypto.PublicKey import DSA
from Crypto.Util import asn1
key = DSA.generate(1024)
# export
seq = asn1.DerSequence()
seq[:] = [ 0, key.p, key.q, key.g, key.y, key.x ]
exported_key = "-----BEGIN DSA PRIVATE KEY-----\n%s-----END DSA PRIVATE KEY-----" % seq.encode().encode("base64")
print exported_key
# import
seq2 = asn1.DerSequence()
data = "\n".join(exported_key.strip().split("\n")[1:-1]).decode("base64")
seq2.decode(data)
p, q, g, y, x = seq2[1:]
key2 = DSA.construct((y, g, p, q, x))
assert key == key2