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中的应用之translate和maketrans用法详解
Aug 27 Python
简单使用Python自动生成文章
Dec 25 Python
Python素数检测实例分析
Jun 15 Python
使用python实现生成用户信息
Mar 20 Python
python得到电脑的开机时间方法
Oct 15 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
Python创建字典的八种方式
Feb 27 Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 Python
详解Python 中sys.stdin.readline()的用法
Sep 12 Python
python定时任务 sched模块用法实例
Nov 04 Python
pytorch forward两个参数实例
Jan 17 Python
超详细Python解释器新手安装教程
May 10 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源代码
2006/10/09 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
环保倡议书100字
2014/05/15 职场文书
历史学专业求职信
2014/06/19 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
机关工会工作总结2015
2015/05/26 职场文书
培根随笔读书笔记
2015/07/01 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
vue封装数字翻牌器
2022/04/20 Vue.js