2

このライブラリを使用して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)
4

1 に答える 1

1

「ASCIIエンコード」とはどういう意味ですか?ご存知のように、私のコードはbase64入力を期待し、base64出力を生成しました。and関数への呼び出しと関数b64decodeの呼び出しを削除すると、生データを渡すことができます。その後、Javaからの入力をrawバイトにデコードするのはあなた次第です。b64encodeencryptdecrypt

于 2011-09-27T11:08:48.537 に答える