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实现的RSS阅读器实例
Jul 25 Python
python操作mysql数据库
Mar 05 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
python 多线程中子线程和主线程相互通信方法
Nov 09 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
Python视频编辑库MoviePy的使用
Apr 01 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
Python实现封装打包自己写的代码,被python import
Jul 12 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 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
德生PL660的电路分析和打磨
2021/03/02 无线电
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
php判断访问IP的方法
2015/06/19 PHP
JS 时间显示效果代码
2009/08/23 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
写了个监控nginx进程的Python脚本
2012/05/10 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
pybind11在Windows下的使用教程
2019/07/04 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
Python实现直播推流效果
2019/11/26 Python
Pandas的数据过滤实现
2021/01/15 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
数控个人求职信范文
2014/02/03 职场文书
联谊会主持词
2014/03/26 职场文书
公司口号大全
2014/06/11 职场文书
创先争优个人承诺书
2014/08/30 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
大学生见习报告总结
2014/11/04 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript
教你利用python实现企业微信发送消息
2021/05/23 Python
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏