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 获取本机ip地址的两个方法
Feb 25 Python
spyder常用快捷键(分享)
Jul 19 Python
深入探究Django中的Session与Cookie
Jul 30 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
python百行代码自制电脑端网速悬浮窗的实现
May 12 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
Python实现自动签到脚本功能
Aug 20 Python
pycharm debug 断点调试心得分享
Apr 16 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数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
python3编写C/S网络程序实例教程
2014/08/25 Python
Python IDLE清空窗口的实例
2018/06/25 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
python中append实例用法总结
2019/07/30 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
红领巾心向党广播稿
2014/01/19 职场文书
电子信息专业自荐书
2014/02/04 职场文书
教师产假请假条
2014/04/10 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
在人间读书笔记
2015/06/30 职场文书
军事理论课感想
2015/08/11 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript