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 if not in 多条件判断代码
Sep 21 Python
Python利用公共键如何对字典列表进行排序详解
May 19 Python
python迭代dict的key和value的方法
Jul 06 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
Form表单及django的form表单的补充
Jul 25 Python
Django MEDIA的配置及用法详解
Jul 25 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
python对一个数向上取整的实例方法
Jun 18 Python
详解python logging日志传输
Jul 01 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
通过代码简单了解django model序列化作用
Nov 12 Python
pycharm无法导入lxml的解决办法
Mar 31 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 chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
简单通用的JS滑动门代码
2008/12/19 Javascript
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python3读取zip文件信息的方法
2015/05/22 Python
python实现批量监控网站
2016/09/09 Python
python opencv之SIFT算法示例
2018/02/24 Python
python实现键盘控制鼠标移动
2020/11/27 Python
Django model反向关联名称的方法
2018/12/15 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
如何理解委托
2012/01/06 面试题
倡议书格式模板
2014/05/13 职场文书
2014年度安全工作总结
2014/12/04 职场文书
初中作文评语
2014/12/25 职场文书
小学安全工作总结2015
2015/05/18 职场文书
请客吃饭开场白
2015/06/01 职场文书
小学语文教师研修日志
2015/11/13 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
如何利用js在两个html窗口间通信
2021/04/27 Javascript
html5表单的required属性使用
2021/07/07 HTML / CSS