このライブラリを使用してJavaで生成された暗号化されたメッセージをPython(M2Cryptoを使用)で復号化しようとしています
私のコード(実際にここで見つけました)は、それ自体で暗号化されたメッセージの復号化を機能しますが、Javaのライブラリからではなく、次のエラーが発生します。
EVPError: 'wrong final block length'
*aes_128_cbc*と*aes_128_ecb*の両方を試しましたが、同じエラーが発生します。
失敗は、Javaの結果がAsciiでエンコードされ、Pythonのコードが他のエンコードを期待していることだと思います(base64で動作するため)が、どこで変更を加えるか(Pythonのコードで)わかりません。私は他のPython暗号化ライブラリを使用することができます。
ありがとう
import M2Crypto
from base64 import b64encode, b64decode
ENC=1
DEC=0
def AES_build_cipher(key, iv, op=ENC):
""""""""
return M2Crypto.EVP.Cipher(alg='aes_128_cbc', key=key, iv=iv, op=op)
def AES_encryptor(key,msg, iv=None):
""""""
#Decode the key and iv
key = b64decode(key)
if iv is None:
iv = '\0' * 16
else:
iv = b64decode(iv)
# Return the encryption function
def encrypt(data):
cipher = AES_build_cipher(key, iv, ENC)
v = cipher.update(data)
v = v + cipher.final()
del cipher
v = b64encode(v)
return v
print "AES encryption successful\n"
return encrypt(msg)
def AES_decryptor(key,msg, iv=None):
""""""
#Decode the key and iv
key = b64decode(key)
print key
print
if iv is None:
iv = '\0' * 16
else:
iv = b64decode(iv)
# Return the decryption function
def decrypt(data):
data = b64decode(data)
cipher = AES_build_cipher(key, iv, DEC)
v = cipher.update(data)
v = v + cipher.final()
del cipher
return v
print "AES dencryption successful\n"
return decrypt(msg)
if __name__ == "__main__":
result = AES_decryptor(b64encode(SECRET_KEY), msg=encrypted_message)