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备份文件的脚本
Aug 11 Python
python使用Queue在多个子进程间交换数据的方法
Apr 18 Python
Python使用PyCrypto实现AES加密功能示例
May 22 Python
Python实现基于二叉树存储结构的堆排序算法示例
Dec 08 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
python开发准备工作之配置虚拟环境(非常重要)
Feb 11 Python
CentOS7安装Python3的教程详解
Apr 10 Python
利用Django模版生成树状结构实例代码
May 19 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 Python
Python 如何查找特定类型文件
Aug 17 Python
DRF框架API版本管理实现方法解析
Aug 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
php下的权限算法的实现
2007/04/28 PHP
PHP 加密与解密的斗争
2009/04/17 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
js快速排序的实现代码
2013/12/08 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Django 使用logging打印日志的实例
2018/04/28 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
HTML5 Web 存储详解
2016/09/16 HTML / CSS
印度网上药店:1mg
2017/10/13 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
外贸业务员求职自荐信分享
2013/09/21 职场文书
高三语文教学反思
2014/01/15 职场文书
灵山大佛导游词
2015/02/04 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技