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实现的一个火车票转让信息采集器
Jul 09 Python
python实现统计代码行数的方法
May 22 Python
讲解Python中fileno()方法的使用
May 24 Python
Python计算一个文件里字数的方法
Jun 15 Python
python 列表删除所有指定元素的方法
Apr 19 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
python 随机打乱 图片和对应的标签方法
Dec 14 Python
Python 单例设计模式用法实例分析
Sep 23 Python
python的命名规则知识点总结
Oct 04 Python
pytorch SENet实现案例
Jun 24 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 05 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文件下载原理
2014/12/25 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
js 数值项目的格式化函数代码
2010/05/14 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
jQuery使用方法
2017/02/04 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
在Python中操作字典之update()方法的使用
2015/05/22 Python
浅谈django model postgres的json字段编码问题
2018/01/05 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
大学活动策划书范文
2014/01/10 职场文书
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
赡养老人协议书范本
2015/08/06 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
详解Flask开发技巧之异常处理
2021/06/15 Python
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技