python实现AES加密与解密


Posted in Python onMarch 28, 2019

AES加密方式有五种:ECB, CBC, CTR, CFB, OFB

从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现

python 在 Windows下使用AES时要安装的是pycryptodome 模块  

pip install pycryptodome

python 在 Linux下使用AES时要安装的是pycrypto模块  

pip install pycrypto

CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)

ECB加密不需要iv

AES CBC 加密的python实现

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex


# 如果text不足16位的倍数就用空格补足为16位
def add_to_16(text):
 if len(text.encode('utf-8')) % 16:
 add = 16 - (len(text.encode('utf-8')) % 16)
 else:
 add = 0
 text = text + ('\0' * add)
 return text.encode('utf-8')


# 加密函数
def encrypt(text):
 key = '9999999999999999'.encode('utf-8')
 mode = AES.MODE_CBC
 iv = b'qqqqqqqqqqqqqqqq'
 text = add_to_16(text)
 cryptos = AES.new(key, mode, iv)
 cipher_text = cryptos.encrypt(text)
 # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
 return b2a_hex(cipher_text)


# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):
 key = '9999999999999999'.encode('utf-8')
 iv = b'qqqqqqqqqqqqqqqq'
 mode = AES.MODE_CBC
 cryptos = AES.new(key, mode, iv)
 plain_text = cryptos.decrypt(a2b_hex(text))
 return bytes.decode(plain_text).rstrip('\0')


if __name__ == '__main__':
 e = encrypt("hello world") # 加密
 d = decrypt(e) # 解密
 print("加密:", e)
 print("解密:", d)

AES ECB加密的python实现

"""
ECB没有偏移量
"""
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex


def add_to_16(text):
 if len(text.encode('utf-8')) % 16:
 add = 16 - (len(text.encode('utf-8')) % 16)
 else:
 add = 0
 text = text + ('\0' * add)
 return text.encode('utf-8')


# 加密函数
def encrypt(text):
 key = '9999999999999999'.encode('utf-8')
 mode = AES.MODE_ECB
 text = add_to_16(text)
 cryptos = AES.new(key, mode)

 cipher_text = cryptos.encrypt(text)
 return b2a_hex(cipher_text)


# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):
 key = '9999999999999999'.encode('utf-8')
 mode = AES.MODE_ECB
 cryptor = AES.new(key, mode)
 plain_text = cryptor.decrypt(a2b_hex(text))
 return bytes.decode(plain_text).rstrip('\0')


if __name__ == '__main__':
 e = encrypt("hello world") # 加密
 d = decrypt(e) # 解密
 print("加密:", e)
 print("解密:", d)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中装饰器的一个妙用
Feb 08 Python
python 爬虫出现403禁止访问错误详解
Mar 11 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
在 Python 中接管键盘中断信号的实现方法
Feb 04 Python
Python-jenkins模块获取jobs的执行状态操作
May 12 Python
Python制作数据预测集成工具(值得收藏)
Aug 21 Python
Python基于staticmethod装饰器标示静态方法
Oct 17 Python
python实现计数排序与桶排序实例代码
Mar 28 #Python
python实现AES和RSA加解密的方法
Mar 28 #Python
python简单实现AES加密和解密
Mar 28 #Python
Python中dict和set的用法讲解
Mar 28 #Python
python3.x实现base64加密和解密
Mar 28 #Python
python实现AES加密解密
Mar 28 #Python
详解python tkinter教程-事件绑定
Mar 28 #Python
You might like
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
PyMongo安装使用笔记
2015/04/27 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
pytorch的batch normalize使用详解
2020/01/15 Python
python实现超级玛丽游戏
2020/03/18 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
英语专业个人求职信范文
2014/02/01 职场文书
电气个人求职信范文
2014/02/04 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
党校学习个人总结
2015/02/15 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS