在python中处理des加解密,常用的库是pyDes这个库,现在以具体例子来讲解加解密算法
1、需求:对一段数字或者字符或者其他格式文本进行加密,本次使用des里面的ECB模式
快捷工具链接:http://tool.chacuo.net/cryptdes
比如:想要实现以上的加密方式,代码实现为:
from pyDes import *
import base64
Des_Key = b"abcdefgh" # 相当于加密钥
Des_IV = b"\x22\x33\x35\x81\xBC\x38\x5A\xE7" # 自定IV向量(官网例子就是这么写的)
#加密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=')
执行测试下结果为:
结果与快捷工具网站上是一致的。
2、加解密过程中问题汇总
①ValueError: Invalid DES key size. Key must be exactly 8 bytes long.
翻译:DES密钥大小无效。密钥长度必须正好为8个字节
根据错误提示从源码来分析:
问题主要出现在密码(key)的长度上(本代码中的Des_Key )比如是控制在8个以内。但是在快捷工具网站上http://tool.chacuo.net/cryptdes 输入超过8个字符串是可以正常加解密的。
通过分析比较后,发现其实加密钥不算输入多长,实际只取前8位字符,所以你会看到8个加密钥及8个以上加密钥的加解密结果一致,如图:
所以后续可以自己碰到是des加密钥超过8个字符时,可以处理下只取前8个密钥就可以了。