Python中使用MODE_CFB模式对字符串进行加密
发布时间:2024-01-06 03:18:04
在Python中,可以使用pycryptodome库来实现MODE_CFB模式对字符串进行加密。下面是一个使用例子:
from Cryptodome.Cipher import AES
from Cryptodome.Random import get_random_bytes
from Cryptodome.Util.Padding import pad, unpad
def encrypt(plaintext, key):
# 生成16字节的随机初始化向量(IV)
iv = get_random_bytes(16)
# 创建一个AES密码块加密器,使用MODE_CFB模式
cipher = AES.new(key, AES.MODE_CFB, iv)
# 对明文进行填充
padded_plaintext = pad(plaintext.encode(), AES.block_size)
# 执行加密操作
ciphertext = cipher.encrypt(padded_plaintext)
# 返回初始化向量和密文
return iv + ciphertext
def decrypt(ciphertext, key):
# 初始化向量长度为16字节
iv = ciphertext[:16]
# 创建一个AES密码块解密器,使用MODE_CFB模式
cipher = AES.new(key, AES.MODE_CFB, iv)
# 执行解密操作
decrypted_text = cipher.decrypt(ciphertext[16:])
# 对解密后的结果进行去填充
plaintext = unpad(decrypted_text, AES.block_size)
# 返回明文结果
return plaintext.decode()
def main():
# 加密密钥,长度必须为16字节(128位)、24字节(192位)或32字节(256位)之一
key = b'Sixteen byte key'
# 待加密的字符串
plaintext = "Hello, World!"
# 加密
ciphertext = encrypt(plaintext, key)
print("Encrypted text: ", ciphertext.hex())
# 解密
decrypted_text = decrypt(ciphertext, key)
print("Decrypted text: ", decrypted_text)
if __name__ == "__main__":
main()
在上述例子中,我们使用Cryptodome.Cipher.AES模块创建了一个AES密码块加密器,并指定使用MODE_CFB模式。然后,我们使用AES密码块加密器的encrypt方法对明文进行加密,并返回密文。解密时,我们使用相同的密钥和MODE_CFB模式创建一个AES密码块解密器,然后使用解密器的decrypt方法对密文进行解密,最后返回解密后的明文。
请注意,上述例子中的密钥长度为16字节,这是由AES算法本身要求的。如果密钥长度不符合要求,将会引发ValueError异常。
