1

独学の練習として、pycrypto ライブラリのいくつかの使用方法を学ぼうとしています。AES を使用して CBC_MODE で暗号文文字列を復号化する必要があります。暗号文、鍵、および IV がすべて与えられます。ここに私が書いたコードがあります:

from Crypto.Cipher import AES

mode = AES.MODE_CBC
key = "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1"
ciphertext = "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1";

iv = ciphertext[:32] 
ciphertext = ciphertext[32:] 
decryptor = AES.new(key, mode, iv)
plaintext = decryptor.decrypt(ciphertext)
print plaintext

これを実行すると、次のエラーが表示されます。

ValueError: IV は 16 バイト長でなければなりません

IV 文字列が 32 個の 16 進文字であるため、16 バイトであることはわかっています。これはタイピングの問題かもしれないと思いますが、修正方法がわかりません。誰でも助けることができますか?

ありがとうございました!

4

3 に答える 3

1

文字列には 16 進文字のみが含まれていますが、それらはプレーンな文字列であるため、すべての文字がカウントされます。

したがって、IV 文字列は から切り出した 32 バイトの長さですciphertext

于 2012-07-20T17:29:05.773 に答える
1

私はあなたが正しいと思います、そしてそれはタイプにかかっています。次のいずれかを試してください。

iv = binascii.unhexlify(暗号文[:32])

また

iv = ロング (暗号文[:32], 16)

于 2013-04-10T02:23:19.070 に答える
0

16 進数を扱っていることをコンピューターに伝えます。文字列として扱っています。iv = iv.decode('hex');

于 2015-02-13T23:19:27.120 に答える