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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值