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回溯法实现数组全排列输出实例分析
Mar 17 Python
python获取标准北京时间的方法
Mar 24 Python
详解Django通用视图中的函数包装
Jul 21 Python
Python设置默认编码为utf8的方法
Jul 01 Python
详解python进行mp3格式判断
Dec 23 Python
对python for 文件指定行读写操作详解
Dec 29 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
Python解析json时提示“string indices must be integers”问题解决方法
Jul 31 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
Python如何实现自带HTTP文件传输服务
Jul 08 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使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
深入理解node.js http模块
2018/01/24 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
wxPython实现画图板
2020/08/27 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
德国旅游网站:weg.de
2018/06/03 全球购物
应用化学专业职业生涯规划书
2013/12/31 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang
Pygame Event事件模块的详细示例
2021/11/17 Python