Расшифровка с использованием открытого ключа в Python

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

——НАЧАТЬ СЕРТИФИКАТ —— XXXXXXXXXXXXXXXXXXXXXXX —— КОНЕЦ СЕРТИФИКАТ ——

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

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

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

За M2Crypto Я сослался на это ссылка на сайт, но RSA.load_pub_key_bio(bio) строка кода дает ошибку.

Любая помощь очень ценится. Спасибо.

0

Решение

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

Вы должны быть уверены, что понимаете, что происходит с этими операциями, прежде чем полагаться на код для обеспечения какой-либо безопасности. Кроме того, если вы контролируете полный стек — от шифрования до дешифрования — стоп делаю так Вместо этого используйте что-то вроде 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:*\x06@\r|e\xcdL\xfe9\x80R\x82c\x00\xc0\x9as\xea'
>>> pkey.decrypt(ciphertext, padding.PKCS1v15())
'asdasd'
>>>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]