作为一项自学练习,我正在努力学习如何使用一些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个字节。我认为这可能是打字问题,但我不知道如何纠正它。有人可以帮忙吗?
谢谢!
答案 0 :(得分:1)
您的字符串只包含十六进制字符,但它们仍然是纯字符串,因此每个字符都很重要。
因此,当您从ciphertext
切出时,您的IV字符串长度为32个字节。
答案 1 :(得分:1)
我怀疑你是对的,而且还打算打字。尝试其中之一:
iv = binascii.unhexlify(ciphertext [:32])
或
iv = long(密文[:32],16)
答案 2 :(得分:0)
告诉你正在处理十六进制的计算机。它将它视为一个字符串。 iv = iv.decode('hex');