分享一个python的aes加密代码


Posted in Python onDecember 22, 2020

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。---百度百科

本科的时候弄过DES加密算法加密计算机文件,而DES加密算法现在基本处于被废弃的状态,所以现在想试试更高级一点的。

DES加密算法可发展为3DES加密算法,后来又被升级为AES加密算法,加长了密钥长度,也就增加了暴力破解的难度。

本次使用Python进行AES的加密解密

import hashlib
from Crypto.Cipher import AES
import base64

class prpcrypt():
 def __init__(self,key):
  self.key = key # 因为在python3中AES传入参数的参数类型存在问题,需要更换为 bytearray , 所以使用encode编码格式将其转为字节格式(linux系统可不用指定编码)
  IV = 16 * '\x00'
  self.iv=IV.encode("utf-8")
  self.mode = AES.MODE_CBC
  self.BS = AES.block_size
  self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS)
  self.unpad = lambda s: s[0:-ord(s[-1])]

 # 加密
 def encrypt(self, text):
  text = self.pad(text).encode("utf-8")
  cryptor = AES.new(self.key, self.mode, self.iv)
  # 目前AES-128 足够目前使用(CBC加密)
  ciphertext = cryptor.encrypt(text)
  # base64加密
  return base64.b64encode(bytes(ciphertext))

 # 解密
 def decrypt(self, text):
  # base64解密
  text = base64.b64decode(text)
  cryptor = AES.new(self.key, self.mode, self.iv)
  # CBC解密
  plain_text = cryptor.decrypt(text)
  # 去掉补足的空格用strip() 去掉
  return self.unpad(bytes.decode(plain_text).rstrip('\0')) # 解密字节???


def gen_binsha(data):
 shavalue = hashlib.sha256()
 shavalue.update(data)
 return shavalue.digest()

if __name__ == '__main__':
 key='78f40cecf89'
 key=gen_binsha(key.encode('utf-8'))
 pc = prpcrypt(key=key) # 初始化密钥 和 iv

 text='qwerqwerkkk12345'
 e = pc.encrypt(text) # 加密
 d = pc.decrypt(e) # 解密
 print("加密:%s" % e)
 print("解密:%s"% d)
 print("长度:%s"% len(d))

以上就是分享一个python的aes加密代码的详细内容,更多关于python的aes加密代码的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中MYSQLdb出现乱码的解决方法
Oct 11 Python
在Python中使用poplib模块收取邮件的教程
Apr 29 Python
python技能之数据导出excel的实例代码
Aug 11 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
Python实现聊天机器人的示例代码
Jul 09 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 Python
python 实现分组求和与分组累加求和代码
May 18 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 Python
浅谈python 类方法/静态方法
Sep 18 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 #Python
去除python中的字符串空格的简单方法
Dec 22 #Python
Python lxml库的简单介绍及基本使用讲解
Dec 22 #Python
Python中过滤字符串列表的方法
Dec 22 #Python
python中@property的作用和getter setter的解释
Dec 22 #Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 #Python
Python实现Word文档转换Markdown的示例
Dec 22 #Python
You might like
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
php数组分页实现方法
2016/04/30 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
新闻内页-JS分页
2006/06/07 Javascript
简单的JS多重继承示例
2008/03/13 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
python下载图片实现方法(超简单)
2017/07/21 Python
python3.7 的新特性详解
2019/07/25 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
python多进程使用函数封装实例
2020/05/02 Python
Django静态文件加载失败解决方案
2020/08/26 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
母亲追悼会答谢词
2014/01/27 职场文书
大学毕业生推荐信
2014/07/09 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
实施意见格式范本
2015/06/05 职场文书
python如何获取网络数据
2021/04/11 Python