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远程登录代码
Apr 29 Python
Python 初始化多维数组代码
Sep 06 Python
python从网络读取图片并直接进行处理的方法
May 22 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
Python语言的面相对象编程方式初步学习
Mar 12 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
python多线程并发及测试框架案例
Oct 15 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
Python txt文件如何转换成字典
Nov 03 Python
python使用pywinauto驱动微信客户端实现公众号爬虫
May 19 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
星际原理概述
2020/03/04 星际争霸
php建立Ftp连接的方法
2015/03/07 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
原生js生成图片验证码
2020/10/11 Javascript
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
Python子类继承父类构造函数详解
2019/02/19 Python
python利用7z批量解压rar的实现
2019/08/07 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
运动会广播稿80字
2014/01/23 职场文书
党务公开方案
2014/05/06 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
实施意见格式范本
2015/06/05 职场文书
行政处罚事先告知书
2015/07/01 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
五年级语文教学反思
2016/03/03 职场文书
python神经网络 使用Keras构建RNN训练
2022/05/04 Python
python绘制云雨图raincloud plot
2022/08/05 Python