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 编码,并返回编码后的字符串。文章来源:https://www.toymoban.com/news/detail-821013.html
请注意,在使用 CBC 模式时,需要确保密钥和初始向量在加密和解密过程中是一致的。同样,确保在 Android 和 Python 中使用相同的密钥格式、字符编码、填充方式和初始向量,以确保生成的加密结果一致。文章来源地址https://www.toymoban.com/news/detail-821013.html
到了这里,关于Python使用CBC加密模式进行AES加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!