用Python实现对称加密模式(ECB、CBC、CFB、OFB等)

2023-03-26 00:00:00 模式 加密 对称

在Python中,可以使用cryptography库来实现对称加密模式。以下是使用ECB、CBC、CFB、OFB对称加密模式的示例代码:

from cryptography.fernet import Fernet
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend

# 生成一个密钥
key = Fernet.generate_key()

# 要加密的消息
message = b"pidancode.com"

# 使用Fernet进行加密和解密(ECB模式)
fernet = Fernet(key)
encrypted_message = fernet.encrypt(message)
decrypted_message = fernet.decrypt(encrypted_message)

print("Encrypted message (ECB):", encrypted_message)
print("Decrypted message (ECB):", decrypted_message)

# 使用Cipher进行加密和解密(CBC模式)
backend = default_backend()
iv = b"1234567890123456"
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)
encryptor = cipher.encryptor()
encrypted_message = encryptor.update(message) + encryptor.finalize()

decryptor = cipher.decryptor()
decrypted_message = decryptor.update(encrypted_message) + decryptor.finalize()

print("Encrypted message (CBC):", encrypted_message)
print("Decrypted message (CBC):", decrypted_message)

# 使用Cipher进行加密和解密(CFB模式)
backend = default_backend()
iv = b"1234567890123456"
cipher = Cipher(algorithms.AES(key), modes.CFB(iv), backend=backend)
encryptor = cipher.encryptor()
encrypted_message = encryptor.update(message) + encryptor.finalize()

decryptor = cipher.decryptor()
decrypted_message = decryptor.update(encrypted_message) + decryptor.finalize()

print("Encrypted message (CFB):", encrypted_message)
print("Decrypted message (CFB):", decrypted_message)

# 使用Cipher进行加密和解密(OFB模式)
backend = default_backend()
iv = b"1234567890123456"
cipher = Cipher(algorithms.AES(key), modes.OFB(iv), backend=backend)
encryptor = cipher.encryptor()
encrypted_message = encryptor.update(message) + encryptor.finalize()

decryptor = cipher.decryptor()
decrypted_message = decryptor.update(encrypted_message) + decryptor.finalize()

print("Encrypted message (OFB):", encrypted_message)
print("Decrypted message (OFB):", decrypted_message)

在这个示例中,首先生成了一个密钥,然后定义了要加密的消息。接下来,使用Fernet进行了ECB模式的加密和解密,使用Cipher进行了CBC、CFB、OFB模式的加密和解密。

注意,每种模式需要指定一个不同的初始向量(IV)。

当运行此代码时,应该输出加密后的消息和解密后的消息,以及使用的加密模式。

相关文章