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学习必备知识汇总
Sep 08 Python
《Python学习手册》学习总结
Jan 17 Python
python实现最长公共子序列
May 22 Python
python监控文件并且发送告警邮件
Jun 21 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
Python常用模块logging——日志输出功能(示例代码)
Nov 20 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 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 上传功能实例代码
2010/04/13 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
php递归创建目录的方法
2015/02/02 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
Vue项目中配置pug解析支持
2019/05/10 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
python matplotlib画图实例代码分享
2017/12/27 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
python ftplib模块使用代码实例
2019/12/31 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
捷克时尚网上商店:OTTO
2018/03/15 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
群众路线教育实践活动方案
2014/02/02 职场文书
师德师风个人反思
2014/04/28 职场文书
司法助理专业自荐书
2014/06/13 职场文书
学生实习证明范文
2014/09/28 职场文书
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android