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

作者:goldensun 时间:2022-09-29 17:43:59 

 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,AES
0
投稿

猜你喜欢

  • 防止表单重复提交的巧妙方法

    2009-03-09 18:32:00
  • js前端实现登录拼图验证功能

    2024-04-19 10:45:29
  • 微信小程序实现分页查询详解

    2024-04-16 10:38:58
  • Python中时间datetime的处理与转换用法总结

    2022-05-03 01:23:01
  • Flask框架Flask-Login用法分析

    2022-05-20 08:21:27
  • python如何利用matplotlib绘制并列双柱状图并标注数值

    2022-08-06 22:00:33
  • pycharm from lxml import etree标红问题及解决

    2021-12-10 05:55:38
  • 解决Django no such table: django_session的问题

    2022-04-13 22:06:21
  • Pygame实战练习之一百层游戏

    2022-01-08 00:07:54
  • python绘制随机网络图形示例

    2023-10-03 11:21:38
  • 使用Kubernetes集群环境部署MySQL数据库的实战记录

    2024-01-14 15:30:16
  • python学习字符串驻留与常量折叠隐藏特性详解

    2021-01-19 14:40:10
  • Python+selenium实现自动循环扔QQ邮箱漂流瓶

    2021-07-12 23:46:28
  • Python实现将数据库一键导出为Excel表格的实例

    2024-01-19 19:47:27
  • Vue插槽slot详细介绍(对比版本变化,避免踩坑)

    2024-05-13 09:13:39
  • MySQL中使用replace、regexp进行正则表达式替换的用法分析

    2024-01-15 13:34:02
  • ASP.NET(AJAX+JSON)实现对象调用

    2023-07-19 12:29:33
  • Python数据结构之树的全面解读

    2021-12-26 14:32:01
  • Linux 安装JDK Tomcat MySQL的教程(使用Mac远程访问)

    2024-01-16 12:12:47
  • Python中的fileinput模块的简单实用示例

    2023-06-19 01:09:27
  • asp之家 网络编程 m.aspxhome.com