使用PyCrypto进行AES加密,mcrypt解密
为了保护一些敏感数据,我决定把它们用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,然后把你的数据导出,再用不同的算法和实现方式重新加密。