Python AES加密实例解析


Posted in Python onJanuary 18, 2018

本文主要是对aes加密技术做一个简要分析,然后使用Python实现,具体介绍如下。

AES,是美国联邦政府采用的一种加密技术,AES有几个模式,其中CBC模式是公认的安全性最好的模式,被TLS所采用。

加密与解密双方需确定好key,key的长度可以是16位,24位,32位中的一个,分别对应了不同的算法。

如果key的长度是是16位的,那么被加密的明文长度必须是16的整数倍,但实际使用中,这么巧的事情很难发生,因此就需要对明文进行填充,最常用的方式就是填充\0,等到解密的时候,再把解密出来的明文右侧的\0全部去掉。你也许会关心,如果我明文最右侧原本就是一堆的\0,那么这么搞,岂不是要出问题么,是滴,确实会出问题,但这样的明文用来做什么呢?你想多了,这样的明文你这辈子恐怕都不会遇到。

下面看一段python示例代码,演示如何使用AES加密技术进行加密和解密

#coding=utf-8 
''''' 
加密的一方和解密的一方必须提前确定好key值 
''' 
from Crypto.Cipher import AES 
from binascii import b2a_hex, a2b_hex 
 
class MyCrypto(): 
  def __init__(self, key): 
    self.key_len = len(key) 
    if not self.key_len == 16 and not self.key_len == 24 and not self.key_len == 32: 
      raise Exception("length of key is wrong") 
    self.key = key 
    self.mode = AES.MODE_CBC  #这种模式更加安全 
 
  def encrypt(self, text): 
    ''''' 
      被加密的明文长度必须是key长度的整数倍,如果不够,则用\0进行填充 
      转成16进制字符串,是因为避免不可见的ascii在显示的时候捣乱 
    ''' 
    cryptor = AES.new(self.key, self.mode, self.key) 
    count = len(text) 
    add = self.key_len - (count % self.key_len) 
    text = text + ('\0' * add) 
    self.ciphertext = cryptor.encrypt(text) 
    return b2a_hex(self.ciphertext) 
 
 
  def decrypt(self, text): 
    ''''' 
      解密后需注意,加密时有可能填充\0,因此要去掉右侧的\0 
    ''' 
    cryptor = AES.new(self.key, self.mode, self.key) 
    plain_text = cryptor.decrypt(a2b_hex(text)) 
    return plain_text.rstrip('\0') 
 
 
if __name__ == '__main__': 
  mc = MyCrypto("kwsy_zds20160822") 
  e = mc.encrypt("张东升") 
  d = mc.decrypt(e) 
  print e,d

总结

以上就是本文关于Python AES加密实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python 采集中文乱码问题的完美解决方法
Sep 27 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
Python 读取用户指令和格式化打印实现解析
Sep 02 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
python迭代器常见用法实例分析
Nov 22 Python
python 实现保存最新的三份文件,其余的都删掉
Dec 22 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
用python计算文件的MD5值
Dec 23 Python
Pandas之缺失数据的实现
Jan 06 Python
快速了解python leveldb
Jan 18 #Python
Python实现动态图解析、合成与倒放
Jan 18 #Python
Python基于matplotlib实现绘制三维图形功能示例
Jan 18 #Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
Jan 18 #Python
python中requests和https使用简单示例
Jan 18 #Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 #Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 #Python
You might like
php5数字型字符串加解密代码
2008/04/24 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
解决python写的windows服务不能启动的问题
2014/04/15 Python
Python中的rfind()方法使用详解
2015/05/19 Python
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
python素数筛选法浅析
2018/03/19 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
pandas分区间,算频率的实例
2019/07/04 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
pycharm修改file type方式
2019/11/19 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
导致python中import错误的原因是什么
2020/07/01 Python
浅谈python 类方法/静态方法
2020/09/18 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
生产部经理岗位职责
2013/12/16 职场文书
新学期家长寄语
2014/01/19 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书
Python OpenCV形态学运算示例详解
2022/04/07 Python