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实现异步回调机制代码分享
Jan 10 Python
python使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
Python入门_浅谈for循环、while循环
May 16 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
python 实现对文件夹内的文件排序编号
Apr 12 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 Python
python实现网络五子棋
Apr 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
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
jQuery入门知识简介
2010/03/04 Javascript
node.js中的require使用详解
2014/12/15 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
js电话号码验证方法
2015/09/28 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
关于vue面试题汇总
2018/03/20 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
python 写入csv乱码问题解决方法
2016/10/23 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
不要用强制方法杀掉python线程
2017/02/26 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
Python猜数字算法题详解
2020/03/01 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
生物技术专业毕业生求职信范文
2013/12/14 职场文书
电子商务专业自我鉴定
2013/12/18 职场文书
职业生涯规划书基本格式
2014/01/06 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
MyBatis 动态SQL全面详解
2021/10/05 MySQL
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS