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中的Descriptor描述符类
Jun 14 Python
简单谈谈python中的多进程
Nov 06 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
Python列表切片常用操作实例解析
Dec 16 Python
Python中实现输入一个整数的案例
May 03 Python
Python中格式化字符串的四种实现
May 26 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
python 生成器需注意的小问题
Sep 29 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中$this->含义分析
2009/11/29 PHP
解析PHP工厂模式的好处
2013/06/18 PHP
js中直接声明一个对象的方法
2014/08/10 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
浅谈js中的this问题
2017/08/31 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
Cython 三分钟入门教程
2009/09/17 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python 操作MySQL详解及实例
2017/04/30 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
python使用建议与技巧分享(一)
2020/08/17 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
汉森批发:Hansen Wholesale
2018/05/24 全球购物
信息科学与技术专业求职信范文
2014/02/20 职场文书
计划生育标语
2014/06/23 职场文书
大专生求职信
2014/06/29 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
家庭困难证明
2014/10/12 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
交通事故和解协议书
2015/01/27 职场文书
周一问候语大全
2015/11/10 职场文书
浅析JavaScript中的变量提升
2022/06/01 Javascript