在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字符串
Jul 16 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
python中的tcp示例详解
Dec 09 Python
redis数据库及与python交互用法简单示例
Nov 01 Python
Python接口自动化判断元素原理解析
Feb 24 Python
python3 sorted 如何实现自定义排序标准
Mar 12 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
Django实现图片上传功能步骤解析
Apr 22 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 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
介绍几个array库的新函数 php
2006/12/29 PHP
php5数字型字符串加解密代码
2008/04/24 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
JavaScript的内存释放问题详解
2015/01/21 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
node 使用 async 控制并发的方法
2018/05/07 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
python 正则式使用心得
2009/05/07 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
python Tkinter的图片刷新实例
2019/06/14 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
python中eval与int的区别浅析
2019/08/11 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
新员工试用期自我鉴定
2014/04/17 职场文书
企业宣传标语
2014/06/09 职场文书
校外活动方案
2014/08/28 职场文书
2014年环卫工作总结
2014/11/22 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
对象析构函数__del__在Python中何时使用
2022/03/22 Python
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle