分享一个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版本的读写锁操作方法
Apr 25 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
简单了解python模块概念
Jan 11 Python
python处理数据,存进hive表的方法
Jul 04 Python
在python中pandas的series合并方法
Nov 12 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
Python3中函数参数传递方式实例详解
May 05 Python
python 字典操作提取key,value的方法
Jun 26 Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 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
PHP4之COOKIE支持详解
2006/10/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
Python的ORM框架SQLObject入门实例
2014/04/28 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
python处理按钮消息的实例详解
2017/07/11 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
NumPy排序的实现
2020/01/21 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
Europcar葡萄牙:葡萄牙汽车和货车租赁
2017/10/13 全球购物
大学生毕业求职简历的自我评价
2013/10/24 职场文书
yy生日主持词
2014/03/20 职场文书
产品销售计划书
2014/05/04 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers