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" # 密鑰長(zhǎng)度必須為16、24或32字節(jié)(128、192或256位)
iv = b"1234567890ABCDEF" # 初始向量長(zhǎng)度必須為16字節(jié)
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("加密結(jié)果:", encrypted_text)
在這個(gè)示例中,我們使用了 cryptography 庫的 Cipher、algorithms、modes、backend 和 padding 模塊。 encrypt 函數(shù)接受明文字符串、密鑰和初始向量(IV)作為參數(shù)。
我們首先使用 Cipher 類來創(chuàng)建一個(gè) AES 密碼器對(duì)象,指定所需的 AES 算法、CBC 加密模式和密鑰。然后,我們獲取密碼器的加密器,并使用 PKCS7 填充方式創(chuàng)建一個(gè)填充器對(duì)象。我們使用填充器對(duì)明文進(jìn)行填充,得到經(jīng)過填充的明文。
接下來,我們使用加密器對(duì)填充后的明文進(jìn)行加密,得到密文。最后,我們使用 base64.b64encode 函數(shù)對(duì)密文進(jìn)行 Base64 編碼,并返回編碼后的字符串。文章來源:http://www.zghlxwxcb.cn/news/detail-821013.html
請(qǐng)注意,在使用 CBC 模式時(shí),需要確保密鑰和初始向量在加密和解密過程中是一致的。同樣,確保在 Android 和 Python 中使用相同的密鑰格式、字符編碼、填充方式和初始向量,以確保生成的加密結(jié)果一致。文章來源地址http://www.zghlxwxcb.cn/news/detail-821013.html
到了這里,關(guān)于Python使用CBC加密模式進(jìn)行AES加密的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!