分享一个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 08 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
想学python 这5本书籍你必看!
Dec 11 Python
代码详解django中数据库设置
Jan 28 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
python字典的遍历3种方法详解
Aug 10 Python
Python中url标签使用知识点总结
Jan 16 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 Python
Pytorch distributed 多卡并行载入模型操作
Jun 05 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&mysql(二)
2006/10/09 PHP
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
JavaScript操作cookie类实例
2015/03/31 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
JavaScript实现的经典文件树菜单效果
2015/09/08 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
python实现二分查找算法
2017/09/21 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
Python 导入文件过程图解
2019/10/15 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
如何用python批量调整视频声音
2020/12/22 Python
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
简历中自我评价怎么写
2014/02/12 职场文书
安全承诺书范文
2014/03/26 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
避暑山庄导游词
2015/02/04 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
二十年同学聚会感言
2015/07/30 职场文书
公司员工管理制度
2015/08/04 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android