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协程用法实例分析
Jun 04 Python
利用python代码写的12306订票代码
Dec 20 Python
Python制作词云的方法
Jan 03 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
python TCP包注入方式
May 05 Python
Django与pyecharts结合的实例代码
May 13 Python
浅谈Python中的字符串
Jun 10 Python
如何在python中判断变量的类型
Jul 29 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
Django实现drf搜索过滤和排序过滤
Jun 21 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 巧用数组降低程序的时间复杂度
2010/01/01 PHP
自己在做项目过程中学到的PHP知识收集
2012/08/20 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
页面版文本框智能提示JS代码
2009/11/20 Javascript
js 获取服务器控件值的代码
2010/03/05 Javascript
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
python游戏开发的五个案例分享
2020/03/09 Python
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
工程测量与监理专业应届生求职信
2013/11/27 职场文书
2014新年寄语
2014/01/20 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫
Github 使用python对copilot做些简单使用测试
2022/04/14 Python