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中的内置函数getattr()介绍及示例
Jul 20 Python
python关闭windows进程的方法
Apr 18 Python
将Django框架和遗留的Web应用集成的方法
Jul 24 Python
详解python中xlrd包的安装与处理Excel表格
Dec 16 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
python筛选出两个文件中重复行的方法
May 31 Python
Python闭包执行时值的传递方式实例分析
Jun 04 Python
python实现kmp算法的实例代码
Apr 03 Python
Python Numpy库datetime类型的处理详解
Jul 13 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
Apr 21 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
PHP线程的内存回收问题
2016/07/08 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
Javascript string 扩展库代码
2010/04/09 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
Vue+Vux项目实践完整代码
2017/11/30 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
python检测lvs real server状态
2014/01/22 Python
Python 字符串操作方法大全
2014/03/11 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
计算机学生求职信范文
2014/01/30 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
作风建设整改方案
2014/10/27 职场文书
2014年教研组工作总结
2014/11/26 职场文书
工人先进事迹材料
2014/12/26 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python
Redis基本数据类型Set常用操作命令
2022/06/01 Redis