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自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
python输出当前目录下index.html文件路径的方法
Apr 28 Python
Python实现字典依据value排序
Feb 24 Python
Python使用redis pool的一种单例实现方式
Apr 16 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 Python
python实现上传下载文件功能
Nov 19 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 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
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
php实现点击可刷新验证码
2015/11/07 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
解密效果
2006/06/23 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
pandas中Timestamp类用法详解
2017/12/11 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
python中scikit-learn机器代码实例
2018/08/05 Python
对python Tkinter Text的用法详解
2018/10/11 Python
django foreignkey(外键)的实现
2019/07/29 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
Django实现分页显示效果
2019/10/31 Python
Python如何读写二进制数组数据
2020/08/01 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
企业面试题试卷附带答案
2015/12/20 面试题
求职信模版
2013/11/30 职场文书
学生手册家长评语
2014/02/10 职场文书
《假如》教学反思
2014/04/17 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
幸福来敲门观后感
2015/06/04 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书