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 相关文章推荐
wxpython学习笔记(推荐查看)
Jun 09 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
Python将list中的string批量转化成int/float的方法
Jun 26 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
Oct 31 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
详细介绍Python进度条tqdm的使用
Jul 31 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
用python批量下载apk
Dec 29 Python
PyTorch device与cuda.device用法
Apr 03 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
搜索引擎技术核心揭密
2006/10/09 PHP
php 文章采集正则代码
2009/12/28 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
浅谈php调用python文件
2019/03/29 PHP
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
python发送邮件接收邮件示例分享
2014/01/21 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
python flask中静态文件的管理方法
2018/03/20 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
如何基于python操作excel并获取内容
2019/12/24 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
Python3运算符常见用法分析
2020/02/14 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
python 实现音频叠加的示例
2020/10/29 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
苹果Mac升级:MacSales.com
2017/11/20 全球购物
大学生职业生涯规划书参考模板
2014/03/05 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
社会实践单位意见
2015/06/05 职场文书
银行工作心得体会范文
2016/01/23 职场文书
Python图像处理库PIL详细使用说明
2022/04/06 Python