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 Web开发模板引擎优缺点总结
May 06 Python
Python定时器实例代码
Nov 01 Python
python中os和sys模块的区别与常用方法总结
Nov 14 Python
python读取中文txt文本的方法
Apr 12 Python
Python分割指定页数的pdf文件方法
Oct 26 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
python微信公众号开发简单流程实现
Mar 09 Python
PYQT5 vscode联合操作qtdesigner的方法
Mar 24 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 Python
Python基于当前时间批量创建文件
May 07 Python
python属于解释语言吗
Jun 11 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 数组实例说明
2008/08/18 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
javaScript语法总结
2016/11/25 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
Vue 2.0 中依赖注入 provide/inject组合实战
2019/06/20 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python中encode()方法的使用简介
2015/05/18 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
利用aardio给python编写图形界面
2017/08/21 Python
python多线程http压力测试脚本
2019/06/25 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
如何在python中实现随机选择
2019/11/02 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
python实现移动木板小游戏
2020/10/09 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
财务主管自我鉴定
2014/01/17 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
工会文体活动总结
2015/05/07 职场文书
昆虫记读书笔记
2015/06/26 职场文书
信息技术课教学反思
2016/02/23 职场文书
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python