2017-10-20 42 views
0

簡単なn00b質問:ベンダーが私に送るopenssl_public_encrypt機能で暗号化されたファイルを解読するためにPHPのopenssl_private_decrypt関数の動作を複製しようとしています。私はPython 3.4を使用していますので、利用可能なライブラリはpyopensslですが、十分に低レベルなので、やりたいことを簡単に実行する方法がわかりません。おそらく非常に簡単ですが、誰かが私がしたいことの例を持っていますか?あなたがインストールすることができCryptography module、とpyopensslでRSA暗号化ファイルを(PHPとOpenSSL経由で)復号化する方法は?

答えて

0

@mnisticのおかげで、いくつかの変更が加えられましたが、うまくいきました。ここでは、最終的な作業コードは(あなたが心の中でopenssl_private_decryptのデフォルトを維持する必要があります)です。

from cryptography.hazmat.primitives import serialization 
from cryptography.hazmat.backends import default_backend 
from cryptography.hazmat.primitives.asymmetric import padding 

# It's critical that the file be opened in mode "rb"! 
with open("private.key", 'rb') as key_file: 
    private_key = serialization.load_pem_private_key(key_file.read(), password=None, backend=default_backend()) 

with open('encrypted_file', 'rb') as encrypted_file: 
    ciphertext = encrypted_file.read() 

plaintext = private_key.decrypt(ciphertext, padding.PKCS1v15()) 

のビット数である(ciphertextは、キーの最大チャンクサイズよりも短くする必要があることに注意してくださいRSAの場合はキーを8で割った値)。将来のGoogle社員に役立つことを願っています!

1

$ pip install cryptography

は、最初のあなたがプライベートキーをロードし、あなたは「パス/に/ key.pem」と呼ばれるファイルに保存されている秘密鍵を持っていると仮定すると、 :

from cryptography.hazmat.primitives import serialization 
with open("path/to/key.pem", "rb") as key_file: 
    private_key = serialization.load_pem_private_key(
     key_file.read(), 
     password=None, 
     backend=default_backend() 
    ) 

そしてあなたが解読:

plaintext = private_key.decrypt(
    ciphertext, 
    padding.OAEP(
     mgf=padding.MGF1(algorithm=hashes.SHA1()), 
      algorithm=hashes.SHA1(), 
      label=None 
    ) 
) 
関連する問題