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实现截屏的函数
Jul 25 Python
python基础教程项目五之虚拟茶话会
Apr 02 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
Python学习笔记之函数的参数和返回值的使用
Nov 20 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
Mar 06 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
解决django框架model中外键不落实到数据库问题
May 20 Python
UI自动化定位常用实现方法代码示例
Oct 27 Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 03 Python
pandas中对文本类型数据的处理小结
Nov 01 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运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
javascript concat数组累加 示例
2009/09/03 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
js 开发之autocomplete="off"在chrom中失效的解决办法
2017/09/28 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
python爬虫实例详解
2018/06/19 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
研发工程师的岗位职责
2013/11/18 职场文书
培训研修方案
2014/06/06 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS