在Python中使用M2Crypto模块实现AES加密的教程


Posted in Python onApril 08, 2015

 AES(英文:Advanced Encryption Standard,中文:高级加密标准),是一种区块加密标准。AES将原始数据分成多个4×4字节矩阵来处理,通过预先定义的密钥对每个字节矩阵中的每个字节进行异或、替换、移位以及线性变换操作来达到加密的目的。密钥长度可以是128,192或256比特。
    下面是一个利用Python M2Crypto库,并使用aes_128_ecb算法进行加密和解密的例子。首先介绍一下几个关键的点:
1、iv(Initialization vector),即初始化向量,用于避免相同的数据多次加密都产生相同的密文。最大长度为16字节,超出16字节部分会被忽略,最好是随机产生以增加加密的强度。
2、ECB (Electronic codebook,ECB),它会对每个4×4字节矩阵都用同一个密钥进行加密,而且?]有使用 IV。优点是每个字节矩阵都可以独立进行加密,因此可以同时对每个字节矩阵进行加密;缺点是对于相关的数据,加密之后的密文都是一样的。
3、Padding,由于AES是以4×4字节矩阵作为单位进行处理,因为待加密数据必须是16的倍数,若不足16的倍数,将会进行填充操作。aes_128_ecb算法加密默认填充模式是pkcs5。
 

from M2Crypto.EVP import Cipher 
from M2Crypto import m2 
from M2Crypto import util 
  
ENCRYPT_OP = 1 # 加密操作 
DECRYPT_OP = 0 # 解密操作 
  
iv = '\0' * 16 # 初始化变量,对于aes_128_ecb算法无用 
PRIVATE_KEY = 'dd7fd4a156d28bade96f816db1d18609' # 密钥 
  
def Encrypt(data): 
 '使用aes_128_ecb算法对数据加密' 
 cipher = Cipher(alg = 'aes_128_ecb', key = PRIVATE_KEY, iv = iv, op = ENCRYPT_OP) 
 buf = cipher.update(data) 
 buf = buf + cipher.final() 
 del cipher 
 # 将明文从字节流转为16进制 
 output = '' 
 for i in buf: 
  output += '%02X' % (ord(i)) 
 return output 
  
def Decrypt(data): 
 '使用aes_128_ecb算法对数据解密' 
 # 将密文从16进制转为字节流 
 data = util.h2b(data) 
 cipher = Cipher(alg = 'aes_128_ecb', key = PRIVATE_KEY, iv = iv, op = DECRYPT_OP) 
 buf = cipher.update(data) 
 buf = buf + cipher.final() 
 del cipher 
 return buf
Python 相关文章推荐
Python中Collection的使用小技巧
Aug 18 Python
简单介绍Python中利用生成器实现的并发编程
May 04 Python
Python操作串口的方法
Jun 17 Python
在Lighttpd服务器中运行Django应用的方法
Jul 22 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
Python socket实现的简单通信功能示例
Aug 21 Python
Python实现多级目录压缩与解压文件的方法
Sep 01 Python
Python列表元素常见操作简单示例
Oct 25 Python
django使用xadmin的全局配置详解
Nov 15 Python
selenium WebDriverWait类等待机制的实现
Mar 18 Python
Python selenium自动化测试模型图解
Apr 15 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 #Python
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 #Python
使用IPython来操作Docker容器的入门指引
Apr 08 #Python
仅用50行Python代码实现一个简单的代理服务器
Apr 08 #Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
Apr 08 #Python
Python 创建子进程模块subprocess详解
Apr 08 #Python
Python中使用gzip模块压缩文件的简单教程
Apr 08 #Python
You might like
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
Python中如何导入类示例详解
2019/04/17 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
《月光启蒙》教学反思
2014/03/01 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
质量承诺书怎么写
2014/05/24 职场文书
2015年党员承诺书
2015/01/21 职场文书
就业意向书范本
2015/05/11 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
《花钟》教学反思
2016/02/17 职场文书