土流网,爱情公寓1优酷,阿福聊斋
电码本模式(electronic codebook book (ecb)
这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。
pkcs5padding和pkcs7padding都是用来填充数据的一种模式。在ecb中,数据是分块加密的。如果需要加密的数据的字节码的长度不是块大小的整数倍就需要填充。
使用pkcs5,填充时:
要填充7个字节,那么填入的值就是0×7;
如果只填充1个字节,那么填入的值就是0×1;
恰好8个字节时还要补8个字节的0×08
正是这种即使恰好是8个字节也需要再补充字节的规定,可以让解密的数据很确定无误的移除多余的字节。
pkcs7和pkcs5的区别是数据块的大小;
因为aes并没有64位的块, 如果采用pkcs5, 那么实质上就是采用pkcs7
安装所需要的包
pip install pycryptodome
python代码
# -*- coding:utf-8 -*- import base64 from crypto.cipher import aes class encryptdate: def __init__(self, key): self.key = key # 初始化密钥 self.length = aes.block_size # 初始化数据块大小 self.aes = aes.new(self.key, aes.mode_ecb) # 初始化aes,ecb模式的实例 # 截断函数,去除填充的字符 self.unpad = lambda date: date[0:-ord(date[-1])] pad / unpad def pad(self, text): ''' #填充函数,使被加密数据的字节码长度是block_size的整数倍 ''' count = len(text.encode('utf-8')) add = self.length - (count % self.length) entext = text + (chr(add) * add) return entext def encrypt(self, encrdata): # 加密函数 res = self.aes.encrypt(self.pad(encrdata).encode("utf8")) msg = str(base64.b64encode(res), encoding="utf8") return msg def decrypt(self, decrdata): # 解密函数 res = base64.decodebytes(decrdata.encode("utf8")) msg = self.aes.decrypt(res).decode("utf8") return self.unpad(msg) eg = encryptdate("iiiioooojjjjpppp") # 这里密钥的长度必须是16的倍数 res = eg.encrypt("中文测试!") print(res) print(eg.decrypt(res))
运行效果
可点击在线加解密,验证一下
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python爬虫:Request Payload和Form Data的简单区别说明
浅谈Python中threading join和setDaemon用法及区别说明
Python3-异步进程回调函数(callback())介绍
python继承threading.Thread实现有返回值的子类实例
Python中使用threading.Event协调线程的运行详解
网友评论