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 psutil模块简单使用实例
Apr 28 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
Python3 Random模块代码详解
Dec 04 Python
Python numpy 常用函数总结
Dec 07 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
python二维图制作的实例代码
Dec 03 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
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
Python访问MySQL封装的常用类实例
2014/11/11 Python
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
Python异常处理知识点总结
2019/02/18 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
什么是TCP/IP
2014/07/27 面试题
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
幼儿教师自我鉴定
2013/11/02 职场文书
求职推荐信范文
2013/12/01 职场文书
汽车促销活动方案
2014/03/31 职场文书
爱祖国演讲稿
2014/05/04 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
争先创优公开承诺书
2014/08/30 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
财务会计求职信范文
2015/03/20 职场文书
创业计划书之酒吧
2019/12/02 职场文书
tomcat下部署jenkins的方法
2022/05/06 Servers