Python 如何实现AES/DES加密和解密
https://www.cnblogs.com/eliwang/p/14880121.html
1、DES实现 (ECB模式没有IV(初始化向量))
import base64 from Crypto.Cipher import DES from Crypto.Util.Padding import pad def encrypt(key, text, mode): ''' DES加密 :param key: 密钥 :param text: 待加密文本 :param mode: 模式 :return: ''' key = key.encode('utf-8') text = text.encode('utf-8') pad_text = pad(text, DES.block_size, style='pkcs7') cipher = DES.new(key, mode) enc_data = cipher.encrypt(pad_text) return base64.b64encode(enc_data).decode('utf-8') def decrypt(key, text, mode): ''' DES解密 :param key: 密钥 :param text: 待解密文本 :param mode: 模式 :return: ''' new_key = key.encode('utf-8') new_text = base64.b64decode(text) # base64解码 cipher = DES.new(new_key, mode) dec_data = cipher.decrypt(new_text) print(dec_data) return dec_data[:-dec_data[-1]].decode('utf-8') # 去除末尾填充的字符 if __name__ == "__main__": key = '12345678' pwd = '密码' enc_pwd = encrypt(key, pwd, DES.MODE_ECB) print(enc_pwd) dec_data = decrypt(key, enc_pwd, DES.MODE_ECB) print(dec_data)
2、AES实现
# coding:utf-8 import base64 from Crypto.Cipher import AES class AESCrypt: def __init__(self,key,mode,iv): self.key = key # 密钥 self.mode = mode # 模式 self.iv = iv #初始化向量 def encrpyt(self,text): '''加密''' num = AES.block_size - len(text) % AES.block_size #需要填充的字符个数 text_pad = (text + num*chr(num)).encode('utf-8') #填充后的字节串 crpytor = AES.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 = AES.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(16) 可以利用random模块随机生成 key = b'\xc7(\xa4rq{\x89r\xd05kH\xbf^\x8a\x16' #密钥,长度可以是16,24或32个字节 mode = AES.MODE_CBC iv = b'-\x95)\x82\x1a\x00\xde/^:\xd3\xbeXK9\xd2' #初始化向量,固定16个字节长度 aes = AESCrypt(key,mode,iv) text = input('请输入需要AES加密的数据:') en_data = aes.encrpyt(text) print('%s 经过加密得到:%s'%(text,en_data)) de_data = aes.decrypt(en_data) print('%s 经过解密得到:%s'%(en_data,de_data))