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异步回调机制实现和使用方法
Nov 26 Python
python中的装饰器详解
Apr 13 Python
详细解析Python当中的数据类型和变量
Apr 25 Python
python 实现一个贴吧图片爬虫的示例
Oct 12 Python
python中csv文件的若干读写方法小结
Jul 04 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
python 求定积分和不定积分示例
Nov 20 Python
利用python绘制数据曲线图的实现
Apr 09 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
使用Python FastAPI构建Web服务的实现
Jun 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(一)
2012/03/21 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
php include类文件超时问题处理
2015/02/06 PHP
8个必备的PHP功能开发
2015/10/02 PHP
Javascript----文件操作
2007/01/18 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
python实现多层感知器
2019/01/18 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
python基于openpyxl生成excel文件
2020/12/23 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
怎么处理XML的中文问题
2015/03/26 面试题
公司合作意向书范文
2014/07/30 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
办公室岗位职责范本
2015/04/11 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
Python Parser的用法
2021/05/12 Python
Python列表的索引与切片
2022/04/07 Python
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL