2009-07-16 5 views
4

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

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

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

MYKEY в моем case - открытая/закрытая ключевая пара OpenSSL RSA, представленная в виде строки.

Это уклоняется с:

unbound method importKey() must be called with key instance as first argument (got str instance instead)

API-интерфейс док говорит:

importKey(self, keystring, **kwds)

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

key(key, passphrase='PASSPHRASE') 

но уклоняется с:

ezPyCrypto.CryptoKeyError: Attempted to import invalid key, or passphrase is bad

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

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

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

ответ

6

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

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

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

k = key(keyobj=myKey, passphrase='PASSPHRASE') 
+0

Хорошо круто, что решает импорт моего ключа. Что касается части дешифрования, я предполагаю, что я использую k.decString (someString) для дешифрования ключа ... спасибо за помощь – Jon

5

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

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

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 
+1

Очень ясно, чего я пытаюсь достичь: «импортировать закрытый/открытый ключ OpenSSL RSA (используя парольную фразу) с библиотекой Python и использовать ее для расшифровки сообщения. " – Jon

+1

Ну, пример выше делает именно это. Однако обычное шифрование RSA редко используется само по себе; обычно у вас есть симметричный алгоритм шифрования ключей, используемый для шифрования потока данных, а RSA используется для шифрования симметричного ключа.Возможно, вам стоит описать свою большую проблему, если вы хотите найти лучшее решение. – abbot