在python中處理des加解密,常用的庫是pyDes這個(gè)庫,現(xiàn)在以具體例子來講解加解密算法
1、需求:對一段數(shù)字或者字符或者其他格式文本進(jìn)行加密,本次使用des里面的ECB模式
快捷工具鏈接:http://tool.chacuo.net/cryptdes

image.png
比如:想要實(shí)現(xiàn)以上的加密方式,代碼實(shí)現(xiàn)為:
from pyDes import *
import base64
Des_Key = b"abcdefgh" # 相當(dāng)于加密鑰
Des_IV = b"\x22\x33\x35\x81\xBC\x38\x5A\xE7" # 自定IV向量(官網(wǎng)例子就是這么寫的)
#加密id算法
def encrypt_str(s):
k = des(Des_Key, ECB, Des_IV, pad=None, padmode=PAD_PKCS5)
encrystr = k.encrypt(s)
print(base64.b64encode(encrystr))
return base64.b64encode(encrystr)
#解密id算法
def decrypt_str(s):
k = des(Des_Key, ECB, Des_IV, pad=None, padmode=PAD_PKCS5)
decrystr = k.decrypt(base64.b64decode(s))
print(decrystr)
return decrypt_str
if __name__ == "__main__":
encrypt_str('1234567')
decrypt_str('En6l+EwvM48=')
執(zhí)行測試下結(jié)果為:

image.png
結(jié)果與快捷工具網(wǎng)站上是一致的。
2、加解密過程中問題匯總
①ValueError: Invalid DES key size. Key must be exactly 8 bytes long.
翻譯:DES密鑰大小無效。密鑰長度必須正好為8個(gè)字節(jié)
根據(jù)錯(cuò)誤提示從源碼來分析:

image.png
問題主要出現(xiàn)在密碼(key)的長度上(本代碼中的Des_Key )比如是控制在8個(gè)以內(nèi)。但是在快捷工具網(wǎng)站上http://tool.chacuo.net/cryptdes 輸入超過8個(gè)字符串是可以正常加解密的。
通過分析比較后,發(fā)現(xiàn)其實(shí)加密鑰不算輸入多長,實(shí)際只取前8位字符,所以你會看到8個(gè)加密鑰及8個(gè)以上加密鑰的加解密結(jié)果一致,如圖:

image.png
所以后續(xù)可以自己碰到是des加密鑰超過8個(gè)字符時(shí),可以處理下只取前8個(gè)密鑰就可以了。