最近公司接口有个需求, 数据传输过程需要加密, 加密的算法中有一项是des加密, 为了满足测试条件, 需要模拟解密及加密过程, 能够将数据还原, 从而校验每个值是否标准.
公司的程序是使用java来实现的, 刚开始完成模拟解码(采用pyDes)的时候, java解码1M的数据需要1.2秒, python解码相同文件需要30秒, 感觉python太慢了. 后来采用pycrypto来对相同数据进行解码, 只需要0.4秒!!!
下面是pyDes的样例代码及运行时间, 加密耗时20秒钟, 解密耗时19秒钟.
[root@localhost ~]# vim 03_des.py # -.- coding:utf-8 -.- __author__ = 'root' import pyDes import logging # 定义日志输出格式. logging.basicConfig(level=logging.DEBUG, datefmt='%Y-%m-%d %I:%M:%S', format='%(asctime)s,%(msecs)d %(levelname)s: %(message)s',) key = "PythonLi" iv = "12345678" content = "今天是个好日子"*10000 generateKey = pyDes.des(key=key, mode=pyDes.CBC, IV=iv, pad=None, padmode=pyDes.PAD_PKCS5) logging.debug("开始加密") encryptContent = generateKey.encrypt(content) logging.debug("加密结束") logging.debug("-"*30+"分割线"+"-"*30) logging.debug("开始解密") generateKey.decrypt(encryptContent) logging.debug("解密结束") [root@localhost ~]# python 03_des.py 2014-11-20 12:44:20,93 DEBUG: 开始加密 2014-11-20 12:44:40,48 DEBUG: 加密结束 2014-11-20 12:44:40,48 DEBUG: ------------------------------分割线------------------------------ 2014-11-20 12:44:40,48 DEBUG: 开始解密 2014-11-20 12:44:59,97 DEBUG: 解密结束
下面是pycrypto的样例代码及运行时间, 加密耗时0.002秒, 解密耗时0.004秒
[root@localhost ~]# vim 03_pycrypto.py # -.- coding:utf-8 -.- __author__ = 'root' import logging from Crypto.Cipher import DES # 定义日志输出格式. logging.basicConfig(level=logging.DEBUG, datefmt='%Y-%m-%d %I:%M:%S', format='%(asctime)s,%(msecs)d %(levelname)s: %(message)s',) key = "PythonLi" iv = "12345678" content = "今天是个好日子"*10000 generateKey = DES.new(key, DES.MODE_CBC, iv) logging.debug("开始加密") encryptContent = generateKey.encrypt(content) logging.debug("加密结束") logging.debug("-"*30+"分割线"+"-"*30) logging.debug("开始解密") generateKey.decrypt(encryptContent) logging.debug("解密结束") [root@localhost ~]# python 03_pycrypto.py 2014-11-20 12:49:32,882 DEBUG: 开始加密 2014-11-20 12:49:32,886 DEBUG: 加密结束 2014-11-20 12:49:32,886 DEBUG: ------------------------------分割线------------------------------ 2014-11-20 12:49:32,886 DEBUG: 开始解密 2014-11-20 12:49:32,890 DEBUG: 解密结束
最终结论就是,pyDes坑了我半年,我算是记住你了...