用Python实现对称加密模式(ECB、CBC、CFB、OFB等)
在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)。
当运行此代码时,应该输出加密后的消息和解密后的消息,以及使用的加密模式。
相关文章