分享一个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中常用的各种数据库操作模块和连接实例
May 29 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
Django添加KindEditor富文本编辑器的使用
Oct 24 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
Python中six模块基础用法
Dec 08 Python
解决torch.autograd.backward中的参数问题
Jan 07 Python
Python序列化pickle模块使用详解
Mar 05 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
关于Numpy之repeat、tile的用法总结
Jun 02 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
php中函数的形参与实参的问题说明
2010/09/01 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
PHP网络操作函数汇总
2015/05/18 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
PHP实现简单登录界面
2019/10/23 PHP
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
JS常用算法实现代码
2016/11/14 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
前端如何实现动画过渡效果
2021/02/05 Javascript
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
Python paramiko模块的使用示例
2018/04/11 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
用python写测试数据文件过程解析
2019/09/25 Python
Python识别html主要文本框过程解析
2020/02/18 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
《十六年前的回忆》教学反思
2014/02/14 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
小学英语复习计划
2015/01/19 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
Python WSGI 规范简介
2021/04/11 Python