最近在用Triple DES的时候,因为在python环境下,有一个PyCrypto模块,安装倒是简单的一笔,pip install PyCrypto就好了,在原来的AES过程中也没有什么事情,但是在用到DES3的时候,出现了一点小问题。

# encoding=utf-8
from Crypto.Cipher import DES3 
des3 = DES3.new('a'*16, 2, '12345678')
aString = '1234567890abcdef'
enData = des3.encrypt(aString)
deData = des3.decrypt(enData) 

if deData == aString: 
    print 'same' 
else: 
    print 'not same'

这里使用同一个DES3对象进行加密解密的时候居然不能解密之前自己加密的数据,本来还以为是接收到的数据报包有问题,之后查了下Google,发现有外国人已经发现了这个问题了。

DES3-CBC gotcha encrypt/decrypt on same object

之后想了下是不是我版本不够新的缘故,发现已经是最新的了,再仔细看了下发现国际友人的结局方案是加密解密的对象都用独立的对象,额,暂时就这么解决了。下面的一个Github链接里那人是直接提出了加解密不要用同一个对象,尽管它们的初始向量是一样的。