作为一项自学练习,我正在努力学习如何使用一些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个字节。我认为这可能是一个打字问题,但我不知道如何纠正。有人能帮忙吗?
谢谢!
发布于 2012-07-20 17:29:05
您的字符串只包含十六进制字符,但它们仍然是普通字符串,因此每个字符都是计数的。
因此,您的IV字符串是32字节,只要您将它从ciphertext中切片出来。
发布于 2013-04-10 02:23:19
我怀疑你是对的,这取决于打字。试一试其中一种:
iv =binascii.unhexlify(密文:32)
或
iv =long(密文:32,16)
发布于 2015-02-13 23:19:27
告诉电脑你在处理巫术。它把它当作一根绳子。iv =iv.decode(‘十六进制’);
https://stackoverflow.com/questions/11499224
复制相似问题