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脚本实现自动发带图的微博
Apr 27 Python
简单谈谈Python中函数的可变参数
Sep 02 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
python基础教程项目三之万能的XML
Apr 02 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
Python @property装饰器原理解析
Jan 22 Python
python实现密码强度校验
Mar 18 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
Pycharm连接远程服务器过程图解
Apr 30 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 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
linux php mysql数据库备份实现代码
2009/03/10 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
php使用session二维数组实例
2014/11/06 PHP
php字符串函数学习之substr()
2015/03/27 PHP
JS 类型转换常见方法小结
2010/05/31 Javascript
Javascript延迟执行实现方法(setTimeout)
2010/12/30 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
Python程序设计入门(3)数组的使用
2014/06/16 Python
python单例模式实例分析
2015/04/08 Python
python3操作mysql数据库的方法
2017/06/23 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
tensorflow 查看梯度方式
2020/02/04 Python
Python实现GIF图倒放
2020/07/16 Python
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
大学生冰淇淋店商业计划书
2014/01/14 职场文书
《问银河》教学反思
2014/02/19 职场文书
保密协议书范本
2014/04/22 职场文书
主题班会演讲稿
2014/05/22 职场文书
2014年后勤工作总结
2014/11/18 职场文书
邀请书格式范文
2015/02/02 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android