2017-02-03 13 views
0

질문은 반복적으로 묻지 만 작업을 완료 할 수 없어 다시 게시합니다. 나는 ----- XXXXXXXXXXXXXXXXXXXXXXX ----- END의 CERTIFICATE -----Python의 공개 키를 사용하여 암호 해독

인증서를 BEGIN -----

의 형식으로되어있는 공개 키 파일을 공유하고

이 파일을 사용하여 PHP에서 나는 암호 해독을 수행하고 openssl_public_decrypt()을 사용하여 디코딩 된 메시지를 얻을 수 있습니다. 이제 Python에서 암호 해독 프로세스를 수행하려고합니다.

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

python-rsaM2Crypto도 도움이되지 않았다 : 나는 함께 노력했다.

M2Crypto의 경우이 코드는 link이지만, RSA.load_pub_key_bio(bio) 코드 줄은 오류를 발생시킵니다.

정말 도움이됩니다. 고맙습니다.

답변

0

cryptography 라이브러리의 유해 물질 층에서이 작업을 수행 할 수 있습니다 (이제 암호화는 pyOpenSSL에서 사용되는 백엔드 라이브러리이며 pyOpenSSL은 일부 용도에 편리하지만 암호화는 훨씬 더 완전한 OpenSSL 바인딩을 제공함) (더 안전하고, 더 나은) 암호 프리미티브 및 다른 암호화 라이브러리와의 바인딩). 하기 전에 위험물 층이있는 발에서 몸을 쏴 죽이는 것이 매우 쉽다는 사실에 유의하십시오. 그러면 암호 팀이 사과한다면 사과하지 않을 것입니다.

모든 종류의 보안을 제공하기 위해 코드를 사용하기 전에 이러한 작업의 내용을 이해해야합니다. 또한 암호화에서 암호 해독까지 전체 스택을 제어하는 ​​경우 이렇게하면됩니다. 대신 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

안녕하십니까, 답변 해 주셔서 감사합니다. 이 질문에 대한 답을 얻은 이유는'암호화 '패키지를 설치하는 중에 문제가 발생하여 결국에는 수정 된 코드를 얻었습니다. 두 번째로 제공 한 코드 조각에서'직렬화'라는 모듈이없는 오류가 발생했습니다. 이 모듈에 대한 패키지를 검색했지만 여러 직렬 변환기가 있으므로 사용하기가 혼란스럽고 일반적인 것이 아닙니다. 답변을 업데이트하면 도움이됩니다. 그리고 암호 해독 만 수행합니다. 암호화 된 데이터 만 제공됩니다. –

+0

죄송합니다. 죄송합니다. 수입이 없습니다. 추가됨. –

+0

''pkey = serialization.load_pem_private_key (key_file.read(), password = None, backend = default_backend()) '''File'/usr/local/lib/python2.7/이 실행되면 문제가 발생합니다. _handle_key_loading_error에서 dist-packages/cryptography/hazmat/backends/openssl/backend.py "1325 줄을 입력하십시오. ValueError ("키 데이터를 직렬화 할 수 없습니다. ")' –