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里将list中元素依次向前移动一位
Sep 12 Python
快速入手Python字符编码
Aug 03 Python
对python append 与浅拷贝的实例讲解
May 04 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
Python如何实现爬取B站视频
May 20 Python
基于python实现操作git过程代码解析
Jul 27 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
python爬虫scrapy框架之增量式爬虫的示例代码
Feb 26 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 04 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新手上路(十二)
2006/10/09 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
代码详解django中数据库设置
2019/01/28 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
工作中的自我评价如何写好
2013/10/28 职场文书
迟到检讨书300字
2014/02/14 职场文书
财务整改报告范文
2014/11/05 职场文书
交通事故被告答辩状
2015/05/22 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
Python绘画好看的星空图
2022/03/17 Python