我有用 PHP 加密的数据,如下所示:
mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SECRET, $data, MCRYPT_MODE_CBC, $iv)
我需要在 Python 3 应用程序中解密这些数据。我正在尝试使用 PyCrypto,但我对其他库持开放态度。我希望以下内容能够发挥作用:
decryptor = AES.new(key, mode, IV=IV)
plain = decryptor.decrypt(ciphertext)
我的初始化向量是32字节,抛出以下异常:
ValueError: IV must be 16 bytes long
如何设置 PyCrypto 使用 32 字节初始化向量和 32 字节块大小?
或者,是否可以使用不同的库来解密数据?
感谢评论,我实施了一个合适的解决方案。我修改了rijndael.py
在链接的重复问题中接受字节而不是字符串。然后,我按如下方式使用它来使用 32 字节初始化向量解密 32 字节块。
from rijndael import rijndael
iv = b'myInitializationVectorfoobarfoob'
key = b'myKeyfoobarfoobarfoobarfoobarfoo'
text = b'myCipherTextFoobarfoobarfoobarfo'
r = rijndael(key, block_size=32)
plaintext = r.decrypt(text)
l = ''.join([chr(a ^ b) for a, b in zip(plaintext.encode('latin-1'), iv)])
print(l)
请注意,使用它而不是 PyCrypto 是唯一必要的,因为 libmcrypt 错误地将数据块大小(以及初始化向量大小)设置为等于密钥大小。据我了解,对于 AES-Rijndael,数据块大小应始终为 128 位。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)