欢迎访问宙启技术站
智能推送

Python代码示例:使用Crypto.Cipher.AES.MODE_CBC加密字符串

发布时间:2023-12-11 07:21:13

以下是一个使用Crypto.Cipher.AES.MODE_CBC模式进行字符串加密的Python代码示例:

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

def pad_text(text):
    pad_size = AES.block_size - len(text) % AES.block_size
    return text + pad_size * chr(pad_size)

def encrypt_text(key, iv, plaintext):
    cipher = AES.new(key, AES.MODE_CBC, iv)
    ciphertext = cipher.encrypt(pad_text(plaintext))
    return ciphertext

def decrypt_text(key, iv, ciphertext):
    cipher = AES.new(key, AES.MODE_CBC, iv)
    padded_plaintext = cipher.decrypt(ciphertext)
    pad_size = ord(padded_plaintext[-1])
    plaintext = padded_plaintext[:-pad_size]
    return plaintext

# 随机生成16字节的密钥和初始化向量
key = get_random_bytes(16)
iv = get_random_bytes(16)

# 明文和加密密钥
plaintext = "Hello, World!"
print("明文:", plaintext)
print("加密密钥:", key.hex())

# 加密
ciphertext = encrypt_text(key, iv, plaintext)
print("密文:", ciphertext.hex())

# 解密
decrypted_text = decrypt_text(key, iv, ciphertext)
print("解密后的文本:", decrypted_text)

在这个代码示例中,我们使用了Crypto.Cipher.AES和Crypto.Random库。

首先,我们定义了pad_text函数,它将填充文本以适应AES块大小。

然后,我们定义了encrypt_text函数,它接受密钥、初始化向量和明文作为输入,并使用AES.MODE_CBC模式创建一个AES对象,然后使用这个对象对填充后的明文进行加密。

接下来,我们定义了decrypt_text函数,它接受密钥、初始化向量和密文作为输入,并使用AES.MODE_CBC模式创建一个AES对象,然后使用这个对象对密文进行解密。解密后,我们从解密的文本中提取出填充的大小,并根据填充大小截断解密的文本以获得原始的明文。

最后,我们生成一个16字节的随机密钥和初始化向量。然后,我们使用这个密钥对明文进行加密,并打印出明文、加密密钥和密文。然后,我们使用密钥和初始化向量对密文进行解密,并打印出解密后的文本。