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实现博客文章爬虫示例
Feb 26 Python
Python Web框架Flask信号机制(signals)介绍
Jan 01 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
python获取服务器响应cookie的实例
Dec 28 Python
Python基本socket通信控制操作示例
Jan 30 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
Python中的__init__作用是什么
Jun 09 Python
Django --Xadmin 判断登录者身份实例
Jul 03 Python
python 实现波浪滤镜特效
Dec 02 Python
用Python 执行cmd命令
Dec 18 Python
python time.strptime格式化实例详解
Feb 03 Python
PyQt 如何创建自定义QWidget
Mar 24 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
php调用google接口生成二维码示例
2014/04/28 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
修复IE9&safari 的sort方法
2011/10/21 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
node.js中fs文件系统目录操作与文件信息操作
2018/02/24 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
js实现日历
2020/11/07 Javascript
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
Python开发的实用计算器完整实例
2017/05/10 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
python素数筛选法浅析
2018/03/19 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
2020/05/26 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
自我鉴定怎么写
2013/12/05 职场文书
销售实习自我鉴定
2013/12/07 职场文书
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
服装行业创业计划书范文
2014/02/05 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
服装设计专业自荐信
2014/06/17 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
小学元宵节活动总结
2015/02/06 职场文书
匿名检举信范文
2015/03/02 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
2016春节慰问信范文
2015/03/25 职场文书
服装区域经理岗位职责
2015/04/10 职场文书