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中判断输入是否为数字的实现代码
May 26 Python
实用自动化运维Python脚本分享
Jun 04 Python
详解基于django实现的webssh简单例子
Jul 17 Python
Sanic框架Cookies操作示例
Jul 17 Python
Python操作mongodb数据库的方法详解
Dec 08 Python
python+ffmpeg批量去视频开头的方法
Jan 09 Python
python版DDOS攻击脚本
Jun 12 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
python新式类和经典类的区别实例分析
Mar 23 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
Django显示可视化图表的实践
May 10 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面向对象全攻略 (五) 封装性
2009/09/30 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
PHP fclose函数用法总结
2019/02/15 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
2015/03/26 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
javascript每日必学之继承
2016/02/23 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
利用JS制作万年历的方法
2017/08/16 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
Python用模块pytz来转换时区
2016/08/19 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
解决Django连接db遇到的问题
2019/08/29 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
Gap工厂店:Gap Factory
2017/11/02 全球购物
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
班主任个人工作反思
2014/04/28 职场文书
党员批评与自我批评
2014/10/15 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技