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获取Ping结果示例代码
Jul 06 Python
理解python中生成器用法
Dec 20 Python
python实现按长宽比缩放图片
Jun 07 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
Python tkinter模版代码实例
Feb 05 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 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输出Excel文件类
2010/02/08 PHP
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
jquery编写日期选择器
2017/03/16 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
python实现矩阵乘法的方法
2015/06/28 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python数据结构之翻转链表
2017/02/25 Python
python用post访问restful服务接口的方法
2018/12/07 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
python实现拼接图片
2020/03/23 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
美国学校用品、教室和教学商店:Discount School Supply
2018/04/04 全球购物
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
门卫班长岗位职责
2013/12/15 职场文书
欢迎领导标语
2014/06/27 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
荒岛余生观后感
2015/06/09 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
python缺失值的解决方法总结
2021/06/09 Python