最近公司接口有個需求, 數據傳輸過程需要加密, 加密的算法中有一項是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坑了我半年,我算是記住你了...