分享一个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使用urllib模块和pyquery实现阿里巴巴排名查询
Jan 16 Python
python插入排序算法实例分析
Jul 03 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
利用Hyperic调用Python实现进程守护
Jan 02 Python
python pycurl验证basic和digest认证的方法
May 02 Python
对命令行模式与python交互模式介绍
May 12 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
pandas基于时间序列的固定时间间隔求均值的方法
Jul 04 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
Aug 09 Python
python接口调用已训练好的caffe模型测试分类方法
Aug 26 Python
一文详述 Python 中的 property 语法
Sep 01 Python
Python的scikit-image模块实例讲解
Dec 30 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错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
浅析python协程相关概念
2018/01/20 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
Pytorch 实现权重初始化
2019/12/31 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
python实现对变位词的判断方法
2020/04/05 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
什么是测试驱动开发(TDD)
2012/02/15 面试题
企业消防安全制度
2014/02/02 职场文书
抄作业检讨书
2014/02/17 职场文书
廉洁使者实施方案
2014/03/29 职场文书
艺术教育实施方案
2014/05/03 职场文书
教师节倡议书
2014/08/30 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
文明礼仪主题班会
2015/08/13 职场文书
《青山不老》教学反思
2016/02/22 职场文书