圆月山庄资源网 Design By www.vgjia.com
引子:
在windows中python3使用 pycryptodemo 模块实现Aes加密解密。Aes加密有多种方式,自己可以上网了解下。 AES是每16位一加密,并且保证key和vi都是16位的。废话不多说直接上代码。
import base64 from Crypto.Cipher import AES from binascii import b2a_hex,a2b_hex class PrpCrypt(object): def __init__(self,key,iv): self.key=key.encode('utf-8') self.mode=AES.MODE_CBC self.iv=iv.encode('utf-8') def pad_byte(self, b): ''' 1 先计算所传入bytes类型文本与16的余数 2 在将此余数转成bytes 当然用0补位也可以 3 已知了 余数 那么就用余数*被转成的余数,就得到了需要补全的bytes 4 拼接原有文本和补位 :param b: bytes类型的文本 :return: 返回补全后的bytes文本 ''' bytes_num_to_pad = AES.block_size - (len(b) % AES.block_size) # python3 中默认unicode转码 # 实际上byte_to_pad 就已经 将 数字转成了unicode 对应的字符 即使你的入参正好是16的倍数,那么bytes也是把列表整体的转码也是有值的 # 后边解密的匿名函数 拿到最后一个数字后,就知道应该截取的长度,在反着切片就行了 # 这样保证了数据的完整性 byte_to_pad = bytes([bytes_num_to_pad]) padding = byte_to_pad * bytes_num_to_pad padded = b + padding return padded def encrypt(self,text): ''' 1 先生成aes实例 2 对传入的text转成bytes 3 对传入的text补全 4 调用encrypt 加密 得到密文 5 先将密文转16进制,在将16进制用base64转码,然后在将得到的base64解码 其实在步骤4 就已经完成了aes加密,我所在的公司加密比较复杂 ,需要的可以直接返回步骤4的值 :param text: :return: ''' cryptor = AES.new(self.key,self.mode,self.iv) text = text.encode('utf-8') text = self.pad_byte(text) self.ciphertext = cryptor.encrypt(text) cryptbase64 = base64.b64encode(b2a_hex(self.ciphertext)).decode('utf8') return cryptbase64 def decrypt(self,text): ''' 解密和加密的顺序是相反的 1 定义匿名函数,去掉补位 2 base64解码 3 生成aes实例 4 16进制转2进制 5 使用decrypt解码 得到补全的bytes类型明文 :param text: :return: 解密且去掉补位的明文 ''' unpad = lambda s: s[:-ord(s[len(s) - 1:])] base64Str = base64.b64decode(text.encode('utf8')) cryptor = AES.new(self.key, self.mode, self.iv) aesStr = cryptor.decrypt(a2b_hex(base64Str)) aesStr = str(unpad(aesStr), encoding='utf8') return aesStr if __name__ == '__main__': data='sadfsasdgsdfgdsf123' pc=PrpCrypt('daajanbaqa654321','1234567890123456') redata = pc.encrypt(data) print(redata) result=pc.decrypt(redata) print(result)
思路:
这里引用一句前辈的话,思路很重要。具体的怎么实现反而在其次。
1 因为Aes是按照16位加密的,key和iv都好说,可以直接设置成定长的16位。
2 因为传入的数据和传回的数据不是定长的,所以加密的时候要先判断是否是16位的倍数,如果不够那么就补全。
3 问题是对端拿到数据后怎么知道从哪里截取。
1 在对传入数据做是否16位判断的时候,你就知道了要补多少位,将这个数字转成bytes类型,python3中默认unicode码。
2 对端拿到数据后,先截取最后一位,在根据unicode转成对应数字,那么对端就知道了从哪开始截取。
3 看下unicode和utf8的关系,utf8是unicode实现的一种方式
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
标签:
Python,aes,加密解密
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月02日
2024年11月02日
- 群星.2003-存为爱2CD【环球】【WAV+CUE】
- 韩磊《试音天碟》高清音频[WAV+CUE]
- 邓涛《寂寞蒲公英(黑胶CD)》[WAV]
- 江志丰.2011-爱你的理由【豪记】【WAV+CUE
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[320K/MP3][140.01MB]
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[FLAC/分轨][293.29MB]
- 首首经典《滚石红人堂I 一人一首成名曲 4CD》[WAV+CUE][2.5G]
- s14上单t0梯度怎么排名 s14世界赛上单t0梯度排行榜
- tes目前进了几次s赛 LPL队伍tes参加全球总决赛次数总览
- 英雄联盟巅峰礼赠什么时候开始 2024巅峰礼赠活动时间介绍
- 冯骥发文谈睡觉重要性 网友打趣:求求你先做DLC
- 博主惊叹《少女前线2》万圣节大雷皮肤:这真能过审吗?
- 《生化危机8》夫人比基尼Mod再引骂战:夸张身材有错吗?
- 江蕙.1994-悲情歌声【点将】【WAV+CUE】
- 戴娆.2006-绽放【易柏文化】【WAV+CUE】