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 文件和输入输出小结
Oct 09 Python
详解Django通用视图中的函数包装
Jul 21 Python
python基础知识小结之集合
Nov 25 Python
python读取oracle函数返回值
Jul 18 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
python中count函数简单的实例讲解
Feb 06 Python
Python PyQt5整理介绍
Apr 01 Python
Python中的整除和取模实例
Jun 03 Python
python中time包实例详解
Feb 02 Python
python Polars库的使用简介
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
PHP 数组遍历顺序理解
2009/09/09 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
node express使用HTML模板的方法示例
2019/08/22 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
python3学生名片管理v2.0版
2018/11/29 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
python 自动批量打开网页的示例
2019/02/21 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
如何理解Python中的变量
2020/06/01 Python
新手学python应该下哪个版本
2020/06/11 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
优秀演讲稿范文
2013/12/29 职场文书
实习生的自我评价
2014/01/08 职场文书
清洁工岗位职责
2015/02/13 职场文书
讲文明倡议书
2015/04/29 职场文书
小学班主任心得体会
2016/01/07 职场文书