python encrypt 实现AES加密的实例详解


Posted in Python onFebruary 20, 2020

AES加密方式有五种ECB, CBC, CTR, CFB, OFB

从安全性角度推荐cbc算法

windows 下安装 : pip install pycryptodome

linux 下安装 : pip install pycrypto

cbc加密需要一个十六位的key 和一个十六位的iv(偏移量)

ecb加密不需要iv

aes cbc 加密的python实现

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

# 如果text不足十六位的倍数用空格补充
def add_to_16(text):
  if len(text.encode('utf8')) % 16:
    add = 16 - (len(text.encode('utf8')) % 16)
  else:
    add = 0
  text = text + '\0' * add
  return text

# 加密
def encrypt(text):
  key = '9999999999999999'.encode('utf8')
  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)

# 解密后去掉空格
def decrypt(text):
  key = '9999999999999999'.encode('utf8')
  mode = AES.MODE_CBC
  iv = b'qqqqqqqqqqqqqqqq'
  cryptos = AES.new(key, mode, iv)
  plain_text = cryptos.decrypt(a2b_hex(text))
  return bytes.decode(plain_text).rstrip('\0')

if __name__ == '__main__':
  a = encrypt('hello')
  b = decrypt(a)
  print('加密', a)
  print('解密', b)

aes ecb加密, 没有偏移量iv

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

# 如果text不足十六位的倍数用空格补充
def add_to_16(text):
  if len(text.encode('utf8')) % 16:
    add = 16 - (len(text.encode('utf8')) % 16)
  else:
    add = 0
  text = text + '\0' * add
  return text

# 加密
def encrypt(text):
  key = '9999999999999999'.encode('utf8')
  mode = AES.MODE_ECB
  text = add_to_16(text)
  cryptos = AES.new(key, mode)
  cipher_text = cryptos.encrypt(text)
  # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
  return b2a_hex(cipher_text)

# 解密后去掉空格
def decrypt(text):
  key = '9999999999999999'.encode('utf8')
  mode = AES.MODE_ECB
  cryptos = AES.new(key, mode)
  plain_text = cryptos.decrypt(a2b_hex(text))
  return bytes.decode(plain_text).rstrip('\0')

if __name__ == '__main__':
  a = encrypt('hello')
  b = decrypt(a)
  print('加密', a)
  print('解密', b)

到此这篇关于python encrypt 实现AES加密的实例详解的文章就介绍到这了,更多相关python encrypt 实现AES加密内容请搜素三水点靠木以前的文章或下面相关文章,希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 Python
解决PySide+Python子线程更新UI线程的问题
Jan 11 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
Pycharm如何运行.py文件的方法步骤
Mar 03 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
Jupyter Notebook打开任意文件夹操作
Apr 14 Python
PyTorch 导数应用的使用教程
Aug 31 Python
python字符串拼接+和join的区别详解
Dec 03 Python
七个Python必备的GUI库
Apr 27 Python
利用Python实时获取steam特惠游戏数据
Jun 25 Python
Python关于反射的实例代码分享
Feb 20 #Python
Python3监控疫情的完整代码
Feb 20 #Python
浅谈Pytorch torch.optim优化器个性化的使用
Feb 20 #Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 #Python
Python sys模块常用方法解析
Feb 20 #Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 #Python
pytorch ImageFolder的覆写实例
Feb 20 #Python
You might like
php面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
jquery select下拉框操作的一些说明
2010/04/02 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
js中replace的用法总结
2013/12/27 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
怎么写好自荐信
2013/10/30 职场文书
自我评价如何写好?
2014/01/05 职场文书
学术会议通知
2015/04/15 职场文书
记者节感言
2015/08/03 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL
python 离散点图画法的实现
2022/04/01 Python