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 linecache.getline()读取文件中特定一行的脚本
Sep 06 Python
python回溯法实现数组全排列输出实例分析
Mar 17 Python
Python使用Flask框架获取当前查询参数的方法
Mar 21 Python
使用Python脚本将Bing的每日图片作为桌面的教程
May 04 Python
python实现的希尔排序算法实例
Jul 01 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
Dec 22 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
Sep 20 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
Python中qutip用法示例详解
Oct 02 Python
如何基于Python pygame实现动画跑马灯
Nov 18 Python
Python-typing: 类型标注与支持 Any类型详解
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与XML联手进行网站编程代码实例
2008/07/10 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中的自定义函数学习笔记
2014/09/23 Python
Python自动登录126邮箱的方法
2015/07/10 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
C语言编程练习
2012/04/02 面试题
七年级数学教学反思
2014/01/22 职场文书
安全宣传标语口号
2014/06/06 职场文书
大专生自荐书范文
2014/06/22 职场文书
街道务虚会发言材料
2014/10/20 职场文书
师德师风个人总结
2015/02/06 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技