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递归计算N!的方法
May 05 Python
python运行时间的几种方法
Jun 17 Python
Python实现修改文件内容的方法分析
Mar 25 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
May 15 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
Python3内置模块random随机方法小结
Jul 13 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
Python pathlib模块使用方法及实例解析
Oct 05 Python
浅谈pytorch中的dropout的概率p
May 27 Python
python区块链持久化和命令行接口实现简版
May 25 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中的string类型使用说明
2010/07/27 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
php解决约瑟夫环示例
2014/04/09 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
javascript 自定义事件初探
2009/08/21 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
jQuery中bind()方法用法实例
2015/01/19 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
详解 vue.js用法和特性
2017/10/15 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python之修改图片像素值的方法
2019/07/03 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
Python 绘制可视化折线图
2020/07/22 Python
python如何快速拼接字符串
2020/10/28 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
怎样创建、运行java程序
2014/08/01 面试题
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
分享几种python 变量合并方法
2022/03/20 Python