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字节的随机密钥和初始化向量。然后,我们使用这个密钥对明文进行加密,并打印出明文、加密密钥和密文。然后,我们使用密钥和初始化向量对密文进行解密,并打印出解密后的文本。
