gpt4 book ai didi

python-3.x - 使用 PyCrypto 使用 32 字节初始化向量解密 MCRYPT_RIJNDAEL_256

转载 作者:行者123 更新时间:2023-12-01 16:16:06 28 4
gpt4 key购买 nike

我有用 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 字节 block 大小?或者,我可以使用不同的库来解密数据吗?

最佳答案

感谢各位的评论,我实现了一个合适的解决方案。我修改了链接的重复问题中的 rijndael.py 以接受字节而不是字符串。然后,我按如下方式使用它来使用 32 字节初始化向量解密 32 字节 block 。

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 错误地将数据 block 大小(以及初始化向量大小)设置为等于 key 大小。据我了解,对于 AES-Rijndael,数据 block 大小应始终为 128 位。

关于python-3.x - 使用 PyCrypto 使用 32 字节初始化向量解密 MCRYPT_RIJNDAEL_256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27334093/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com