在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解析json实例方法
Nov 19 Python
python实现通过代理服务器访问远程url的方法
Apr 29 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
Nov 11 Python
单链表反转python实现代码示例
Feb 08 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
10分钟教你用Python实现微信自动回复功能
Nov 28 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
使用OpenCV实现仿射变换—平移功能
Aug 29 Python
python计算无向图节点度的实例代码
Nov 22 Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 Python
Python实现中英文全文搜索的示例
Dec 04 Python
python接口测试返回数据为字典取值方式
Feb 12 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
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
javascript中this指向详解
2016/04/23 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
利用python爬取软考试题之ip自动代理
2017/03/28 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
python中类的属性和方法介绍
2018/11/27 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
zooplus意大利:在线宠物商店
2019/08/07 全球购物
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
导游实习生自荐书
2014/01/28 职场文书
小学社团活动总结
2014/06/27 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
公司出差管理制度范本
2015/08/05 职场文书
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android