分享一个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计算文本文件行数的方法
Jul 06 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
Jul 31 Python
python selenium循环登陆网站的实现
Nov 04 Python
Python2与Python3的区别详解
Feb 09 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
python logging.basicConfig不生效的原因及解决
Feb 20 Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 Python
python图片合成的示例
Nov 09 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 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
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
js常用正则表达式集锦
2019/05/17 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
Python修改Excel数据的实例代码
2013/11/01 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
Python绘制3D图形
2018/05/03 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
三星英国官网:Samsung英国
2018/09/25 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
Linux如何压缩可执行文件
2013/10/21 面试题
2014年预备党员学习两会心得体会
2014/03/17 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
小学生常见病防治方案
2014/06/06 职场文书
中学教师个人总结
2015/02/10 职场文书
个人催款函范文
2015/06/24 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
初中地理教学反思
2016/02/19 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
Redis实现一个账号只能登录一个设备
2022/04/19 Redis