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中使用SAX解析xml实例
Nov 21 Python
python实现按任意键继续执行程序
Dec 30 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
Python Json序列化与反序列化的示例
Jan 31 Python
python实现图书管理系统
Mar 12 Python
pandas数值计算与排序方法
Apr 12 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
详解如何用python实现一个简单下载器的服务端和客户端
Oct 28 Python
Python求解正态分布置信区间教程
Nov 20 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 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/03/10 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
php自定义hash函数实例
2015/05/05 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
详解Webpack4多页应用打包方案
2020/07/16 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
法国太阳镜店:Sunglasses Shop
2016/08/27 全球购物
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
南京青奥会口号
2014/06/12 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
国庆节慰问信
2015/02/15 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
九年级化学教学反思
2016/02/22 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android
MySQL创建管理子分区
2022/04/13 MySQL