【Python】Crypto模块_ DES 加解密
1、了解
DES算法是一种经典的对称算法,即加密数据和解密数据用的密钥是同一个。
DES算法的最主要的内容有三个:Key、Data、Mode。
Key:密钥(密钥长度为64位二进制,即8个字节的长度。其中有8位是校验位)
Data:加密数据或解密数据(每64位即8字节位一块,按块进行加解密)
Mode:加密操作、解密操作
2、python 代码
import base64 from Crypto.Cipher import DES class DESCrypt: def __init__(self, key, mode, iv): self.key = key # 密钥 self.mode = mode # 模式 self.iv = iv # 初始化向量 def encrpyt(self, text): '''加密''' num = DES.block_size - len(text) % DES.block_size # 需要填充的字符个数 text_pad = (text + num * chr(num)).encode('utf-8') # 填充后的字节串 crpytor = DES.new(self.key, self.mode, self.iv) encrypt_data = crpytor.encrypt(text_pad) # 对数据进行加密 return base64.b64encode(encrypt_data).decode() def decrypt(self, text): '''解密''' data = base64.b64decode(text.encode()) crpytor = DES.new(self.key, self.mode, self.iv) decrypt_data = crpytor.decrypt(data) # 对数据进行解密 res = decrypt_data[:-decrypt_data[-1]].decode() # 去除多余字符 return res if __name__ == '__main__': # key = random._urandom(8) 可以利用random模块随机生成 # key = b'C\xc5\xa0\x04!\xe3\xd59' # 密钥,固定8个字节长度 key = b'sync_key' # 密钥,固定8个字节长度 mode = DES.MODE_CBC iv = b'\x9a\xf8\xad\xeb.\xb7B\xe1' # 初始化向量,固定8个字节长度 des = DESCrypt(key, mode, iv) text = input('请输入需要DES加密的数据:') en_data = des.encrpyt(text) print('%s 经过加密得到:%s' % (text, en_data)) de_data = des.decrypt(en_data) print('%s 经过解密得到:%s' % (en_data, de_data))
执行结果
-------------------------------------------------------------------------------------
如果万事开头难 那请结局一定圆满 @ Phoenixy
-------------------------------------------------------------------------------------