Расшифровка Python RSA с использованием ключей, сгенерированных OpenSSL - PullRequest
4 голосов
/ 16 июля 2009

Кто-нибудь знает самый простой способ импортировать закрытый / открытый ключ OpenSSL RSA (используя фразу-пароль) с библиотекой Python и использовать его для расшифровки сообщения.

Я взглянул на ezPyCrypto, но, похоже, не смог распознать ключ OpenSSL RSA, я попытался импортировать ключ с помощью importKey следующим образом:

key.importKey(myKey, passphrase='PASSPHRASE')

myKey в моем случае - это пара открытых / закрытых ключей OpenSSL RSA, представленная в виде строки.

Это расстается с:

несвязанный метод importKey () должен вызываться с экземпляром ключа как первым аргумент (вместо этого получил экземпляр str)

Документ API говорит:

importKey (self, keystring, ** kwds)

Может кто-нибудь подсказать, как я читаю ключ при использовании ezPyCrypto? Я также попробовал:

key(key, passphrase='PASSPHRASE')

но это мешает:

ezPyCrypto.CryptoKeyError: Попытка импортировать неверный ключ или фразу-пароль это плохо

Ссылка на документы здесь:

http://www.freenet.org.nz/ezPyCrypto/detail/index.html

РЕДАКТИРОВАТЬ: Просто обновление об этом. Успешно импортирован ключ RSA, но возникла реальная проблема с расшифровкой, поскольку eqPyCrypto не поддерживает блочный шифр AES. Просто чтобы люди знали. Мне удалось сделать то, что я хотел, используя ncrypt (http://tachyon.in/ncrypt/). У меня были некоторые проблемы с компиляцией с M2Crypto из-за проблем компиляции SWIG и OpenSSL, , несмотря на то, что были установлены версии, которые превышали минимальные требования. Кажется, что на данный момент платформы шифрования / дешифрования Python являются чем-то вроде минного поля. Хо-ха, спасибо за вашу помощь.

Ответы [ 2 ]

6 голосов
/ 16 июля 2009

Первая ошибка говорит вам, что importKey необходимо вызывать на экземпляре из key.

k = key()
k.importKey(myKey, passphrase='PASSPHRASE')

Тем не менее, документация предполагает, что это лучший способ сделать то, что вы хотите:

k = key(keyobj=myKey, passphrase='PASSPHRASE')
5 голосов
/ 16 июля 2009

Не ясно, чего вы пытаетесь достичь, но вы можете попробовать M2Crypto. С моей точки зрения, это лучшая оболочка OpenSSL для Python.

Вот пример кода шифрования / дешифрования RSA:

import M2Crypto as m2c
import textwrap
key = m2c.RSA.load_key('key.pem', lambda prompt: 'mypassword')

# encrypt something:
data = 'testing 123'
encrypted = key.public_encrypt(data, m2c.RSA.pkcs1_padding)
print "Encrypted data:"
print "\n".join(textwrap.wrap(' '.join(['%02x' % ord(b) for b in encrypted ])))

# and now decrypt it:
decrypted = key.private_decrypt(encrypted, m2c.RSA.pkcs1_padding)
print "Decrypted data:"
print decrypted
print data == decrypted
...