在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实现简单截取中文字符串的方法
Jun 15 Python
Python 文件操作的详解及实例
Sep 18 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
基于python批量处理dat文件及科学计算方法详解
May 08 Python
Python面向对象类继承和组合实例分析
May 28 Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 Python
Pyqt5实现英文学习词典
Jun 24 Python
python中的colorlog库使用详解
Jul 05 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
django重新生成数据库中的某张表方法
Aug 28 Python
Ranorex通过Python将报告发送到邮箱的方法
Jan 12 Python
Python实现照片卡通化
Dec 06 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字符串过滤与替换小结
2015/01/26 PHP
php自动加载代码实例详解
2021/02/26 PHP
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
python2与python3共存问题的解决方法
2018/09/18 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
如何基于线程池提升request模块效率
2020/04/18 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
村居抓节水倡议书
2014/05/19 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
聘用意向书
2014/07/29 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
2015年司法局工作总结
2015/05/22 职场文书
千与千寻观后感
2015/06/04 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
Python利用folium实现地图可视化
2021/05/23 Python