2017-02-03 13 views
0

Вопрос задается несколько раз, но я не могу получить работу, поэтому отправляю сообщение снова. Я делил файл открытого ключа, который находится в форматеРасшифровка с использованием открытого ключа в Python

----- BEGIN CERTIFICATE ----- ----- END XXXXXXXXXXXXXXXXXXXXXXX СЕРТИФИКАТ -----

Используя этот файл, на PHP я могу выполнить дешифрование и получить декодированное сообщение, используя openssl_public_decrypt(). Теперь я пытаюсь выполнить процесс расшифровки в Python. Я попытался с:

Crypto - gives 'valueerror: rsa key format is not supported' when RSA.importKey() is called. 

python-rsa и M2Crypto также не помогло.

Для M2Crypto Я назвал это link, но RSA.load_pub_key_bio(bio) строка кода дает ошибку.

Любая помощь действительно оценена. Спасибо.

ответ

0

Вы можете сделать это с помощью слоя hazmat библиотеки cryptography (обратите внимание, что криптография теперь является внутренней библиотекой, используемой pyOpenSSL, в то время как pyOpenSSL удобна для некоторых целей, криптография обеспечивает гораздо более полную привязку OpenSSL, а также полезную более высокую (более безопасные, лучшие) криптографические примитивы и привязки к другим криптографическим библиотекам). Прежде чем вы это сделаете, обратите внимание, что очень легко стрелять в ногу с помощью слоя hazmat, и команда криптографии не будет извиняться, если вы это сделаете.

Вы должны быть уверены, что понимаете, что происходит с этими операциями, прежде чем полагаться на код для обеспечения какой-либо безопасности. Кроме того, если вы контролируете полный стек - от шифрования до дешифрования - stop делать это таким образом. Вместо этого используйте что-то вроде PGP.

>>> from cryptography.hazmat.backends import default_backend 
>>> from cryptography.hazmat.primitives import serialization 
>>> with open("key.pem") as key_file: 
...  pkey = serialization.load_pem_private_key(key_file.read(), password=None, backend=default_backend()) 
... 
>>> from cryptography.hazmat.primitives.asymmetric import padding 
>>> ciphertext = pkey.public_key().encrypt(b"asdasd", padding.PKCS1v15()) 
>>> print repr(ciphertext) 
'*\xf3\x8e2T\x8f\x93\xae}\x18\x9f7\x00\xbcw\xbd$\x14\x9f6\x9a\xc3\xa1\xa8\xf3\xa5\xcc\xae\x89\x17]\x91\x1d\x85\xb0.\xf7&\x12w\x0ca\x1cN\xd2\x8f\xf5\xf7\xfe\x93\xfbL\x17#\xc6g\x1dj\x84\xc3ET\xd1\x92 \xd2u\xc7AF\xa9<4i`d\xdb\xc0%\xae\x06\xc4\xeeJsC\x06\x80\xc9* \x11\x99P\xdc\xa9S\xad\xe2\xe5L\x9f\x9f\x0c\x04\xef\x95\xd7:*\[email protected]\r|e\xcdL\xfe9\x80R\x82c\x00\xc0\x9as\xea' 
>>> pkey.decrypt(ciphertext, padding.PKCS1v15()) 
'asdasd' 
>>> 
+0

привет, спасибо за ответ. Причина, по которой я отвечаю на это позже, ответил - я столкнулся с проблемами при установке пакета 'cryptography', наконец, исправил его, во-вторых, в фрагменте кода, который вы предоставили, я получаю ошибку, поскольку ни один модуль с именем' serialization'. Я просмотрел пакет для этого модуля, но было несколько сериализаторов, поэтому было смущено, какой из них использовать, и они не являются универсальными. Было бы полезно, если вы обновите ответ. И я выполняю только дешифрование. Мне предоставлены только зашифрованные данные. –

+0

К сожалению, у него отсутствует импорт! Добавлен. –

+0

У меня возникают проблемы, когда выполняется строка 'pkey = serialization.load_pem_private_key (key_file.read(), password = None, backend = default_backend())', 'File '/usr/local/lib/python2.7/ dist-packages/cryptography/hazmat/backends/openssl/backend.py ", строка 1325, в _handle_key_loading_error повысить значение ValueError (" Не удалось выполнить несериализацию данных ключа. ")' –