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中的绝对路径和相对路径
Aug 30 Python
python编程嵌套函数实例代码
Feb 11 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
python 多个参数不为空校验方法
Feb 14 Python
python 对字典按照value进行排序的方法
May 09 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 Python
Django搭建项目实战与避坑细节详解
Dec 06 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 xml文件操作实现代码(二)
2009/03/20 PHP
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
IE与FireFox中的childNodes区别
2011/10/20 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
Python fileinput模块使用实例
2015/05/28 Python
python 字典(dict)按键和值排序
2016/06/28 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
python绘制玫瑰的实现代码
2020/03/02 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
环境工程专业个人求职信
2013/12/05 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
教师考察材料范文
2014/06/03 职场文书
我的中国心演讲稿
2014/09/04 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书