分享一个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实现的各种排序算法代码
Mar 04 Python
python之wxPython菜单使用详解
Sep 28 Python
用python读写excel的方法
Nov 18 Python
Python装饰器使用实例:验证参数合法性
Jun 24 Python
Python 爬虫多线程详解及实例代码
Oct 08 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
python opencv之分水岭算法示例
Feb 24 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
python3中函数参数的四种简单用法
Jul 09 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
Python 函数list&read&seek详解
Aug 28 Python
详解Go语言运用广度优先搜索走迷宫
Jun 23 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中实现图片的锐化
2006/10/09 PHP
缓存技术详谈―php
2006/12/14 PHP
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
javascript的push使用指南
2014/12/05 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
js实现图片实时时钟
2020/01/15 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
python使用循环实现批量创建文件夹示例
2014/03/25 Python
详解python 中in 的 用法
2019/12/12 Python
numpy库reshape用法详解
2020/04/19 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
汽修专业自荐信
2014/07/07 职场文书