在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定时器实例代码
Nov 01 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
python保存网页图片到本地的方法
Jul 24 Python
python中cPickle类使用方法详解
Aug 27 Python
对python生成业务报表的实例详解
Feb 03 Python
浅谈Python基础—判断和循环
Mar 22 Python
在linux下实现 python 监控usb设备信号
Jul 03 Python
使用python实现滑动验证码功能
Aug 05 Python
python常用数据重复项处理方法
Nov 22 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 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
最小化数据传输――在客户端存储数据
2006/10/09 PHP
?算你??的 PHP 程式大小
2006/12/06 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
2018/01/07 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
关于Vue中axios的封装实例详解
2019/10/20 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
python中for用来遍历range函数的方法
2018/06/08 Python
python3学生名片管理v2.0版
2018/11/29 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
如何在python中判断变量的类型
2020/07/29 Python
入党积极分子思想汇报范文
2014/01/05 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
企业员工薪酬方案
2014/06/04 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
融资合作协议书范本
2014/10/17 职场文书
综合测评自我评价
2015/03/06 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
javascript数组includes、reduce的基本使用
2021/07/02 Javascript