使用PyCrypto进行AES加密,mcrypt解密

3 投票
2 回答
3696 浏览
提问于 2025-04-15 20:49

为了保护一些敏感数据,我决定把它们用AES加密存储在硬盘上。我使用了PyCrypto来实现这个加密。

这些数据很重要,而且存储的加密数据将是我唯一的副本(除了备份),所以我想找一种方法来提取数据,而不依赖于PyCrypto,这样即使将来PyCrypto无法使用,我也有备选方案。

我觉得mcrypt可能是一个选择。

这是我用来写入一些密文的测试案例:

import Crypto.Cipher.AES
import sys

pwd  = 'qwertzuiopasdfgh'
mode = Crypto.Cipher.AES.MODE_CBC
aes  = Crypto.Cipher.AES.new( pwd, mode )
text = 'asdfghjklyxcvbnm'
sys.stdout.write( aes.encrypt( text ) )

我把输出重定向到一个文件out.nc,然后尝试通过

mcrypt -d -b -k qwertzuiopasdfgh -a rijndael-128 -m CBC out.nc

来解密,但结果文件out的大小却是零字节,真不幸。

我希望能找到一些mcrypt的选项组合,让这个过程顺利进行……

2 个回答

1

我觉得问题可能出在你没有为CBC模式提供一个初始化向量(IV)。如果没有IV,mCrypt和PyCrypto可能会用不同的默认IV来处理,这样就会导致结果不一样。我见过一些实现(比如phpseclib)默认使用16个空字节作为IV,而mcrypt可能就不是这样做的。

-1

为什么在没有PyCrypto的情况下能够恢复数据很重要呢?其实你可以简单地启动一个虚拟机,装上旧的操作系统和旧版本的PyCrypto,然后把你的数据导出,再用不同的算法和实现方式重新加密。

撰写回答