내 코드와 함께 자바에서 생성 된 암호화 된 메시지의 암호를 해독하기 위해 노력하고있어
을에서 암호화 된 메시지는 암호화 해독 메시지를 작동 그 자체가 아니라 자바의 라이브러리에서, 나는 다음과 같은 오류 얻을 : 나는 두 * aes_128_cbc *와 * aes_128_ecb * 시도
EVPError: 'wrong final block length'
와 나는 같은 오류가 발생합니다.
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)
맞습니다. 모든 b64encode/decode 호출을 삭제했지만 코드가 사용하는 CBC가 아닌 ECB 모드에서 Java JCE 암호화 결과와 일치하도록 일부 변경했습니다. 또한 * key.decode ("hex") *와 * v = v.encode ("hex") *에 대해 * v = b64encode (v) *를 암호화 방법으로 대체했습니다. . – Imanol