Python使用CBC加密模式进行AES加密

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
import base64

plaintext = "Hello, World!"
key = b"0123456789ABCDEF"  # 密钥长度必须为16、24或32字节(128、192或256位)
iv = b"1234567890ABCDEF"  # 初始向量长度必须为16字节
def encrypt(plaintext, key, iv):
    backend = default_backend()
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)
    encryptor = cipher.encryptor()

    padder = padding.PKCS7(algorithms.AES.block_size).padder()
    padded_plaintext = padder.update(plaintext.encode('utf-8')) + padder.finalize()

    ciphertext = encryptor.update(padded_plaintext) + encryptor.finalize()
    return base64.b64encode(ciphertext).decode('utf-8')
   
encrypted_text = encrypt(plaintext, key, iv)
print("加密结果:", encrypted_text)

在这个示例中,我们使用了 cryptography 库的 Cipher、algorithms、modes、backend 和 padding 模块。 encrypt 函数接受明文字符串、密钥和初始向量(IV)作为参数。

我们首先使用 Cipher 类来创建一个 AES 密码器对象,指定所需的 AES 算法、CBC 加密模式和密钥。然后,我们获取密码器的加密器,并使用 PKCS7 填充方式创建一个填充器对象。我们使用填充器对明文进行填充,得到经过填充的明文。

接下来,我们使用加密器对填充后的明文进行加密,得到密文。最后,我们使用 base64.b64encode 函数对密文进行 Base64 编码,并返回编码后的字符串。

请注意,在使用 CBC 模式时,需要确保密钥和初始向量在加密和解密过程中是一致的。同样,确保在 Android 和 Python 中使用相同的密钥格式、字符编码、填充方式和初始向量,以确保生成的加密结果一致。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值