Python实现数据加密和解密:cryptography库教程 在现代互联网时代,数据安全已经成为了一个非常重要的问题。如果你想安全地存储、传输和处理数据,那么加密就是一个必要的步骤。Python作为一种通用的编程语言,也提供了一些很好的加密库。其中,cryptography就是一个很好的选择。 在本篇文章中,我们将介绍如何使用Python的cryptography库实现数据加密和解密的步骤。我们将介绍Symmetric Encryption(对称加密)和Asymmetric Encryption(非对称加密)的差别,并给出两种不同类型的加密方法的示例代码。 1. Symmetric Encryption (对称加密) 在对称加密中,一个密钥被用于加密和解密数据。由于加密和解密使用同一个密钥,因此这种加密方式被称为对称加密。 在Python中,我们使用cryptography库来实现对称加密。下面是一个使用AES算法进行加密和解密的示例代码: ``` from cryptography.fernet import Fernet def generate_key(): key = Fernet.generate_key() with open("secret.key", "wb") as key_file: key_file.write(key) def load_key(): return open("secret.key", "rb").read() def encrypt_message(message): key = load_key() encoded_message = message.encode() f = Fernet(key) encrypted_message = f.encrypt(encoded_message) return encrypted_message def decrypt_message(encrypted_message): key = load_key() f = Fernet(key) decrypted_message = f.decrypt(encrypted_message) decoded_message = decrypted_message.decode() return decoded_message generate_key() message = input("Enter message to encrypt: ") encrypted_message = encrypt_message(message) print("Encrypted message: ", encrypted_message) decrypted_message = decrypt_message(encrypted_message) print("Decrypted message: ", decrypted_message) ``` 首先,我们需要生成一个密钥并保存在一个文件中。在这个例子中,我们使用了Fernet算法来生成密钥。生成密钥之后,我们可以使用该密钥来加密和解密字符串数据。 在上述代码中,我们使用了input()函数来接收用户输入。然后,我们将用户输入的消息编码并使用Fernet密钥进行加密。加密后,我们将加密后的消息打印出来,并将其解密并打印。 2. Asymmetric Encryption (非对称加密) 在非对称加密中,两个不同的密钥被用于加密和解密数据。一个密钥被称为公钥,另一个密钥被称为私钥。公钥可以被公开传输,但私钥应该保持秘密。 在Python中,我们可以使用cryptography库来实现非对称加密。下面是一个使用RSA算法进行加密和解密的示例代码: ``` from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization, hashes def generate_key(): private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, ) pem_private_key = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption() ) public_key = private_key.public_key() pem_public_key = public_key.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo ) with open("private_key.pem", "wb") as private_key_file: private_key_file.write(pem_private_key) with open("public_key.pem", "wb") as public_key_file: public_key_file.write(pem_public_key) def load_private_key(): with open("private_key.pem", "rb") as key_file: private_key = serialization.load_pem_private_key( key_file.read(), password=None, ) return private_key def load_public_key(): with open("public_key.pem", "rb") as key_file: public_key = serialization.load_pem_public_key( key_file.read(), ) return public_key def encrypt_message(message): public_key = load_public_key() encoded_message = message.encode() encrypted_message = public_key.encrypt( encoded_message, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) return encrypted_message def decrypt_message(encrypted_message): private_key = load_private_key() decrypted_message = private_key.decrypt( encrypted_message, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) decoded_message = decrypted_message.decode() return decoded_message generate_key() message = input("Enter message to encrypt: ") encrypted_message = encrypt_message(message) print("Encrypted message: ", encrypted_message) decrypted_message = decrypt_message(encrypted_message) print("Decrypted message: ", decrypted_message) ``` 首先,我们生成了一个私钥和公钥,并将它们分别保存在文件中。然后,我们可以使用公钥来加密字符串数据,即使公钥是公开的。加密后的消息可以被传输到其他人,但只有私钥持有者可以解密消息。 在上述代码中,我们使用input()函数来接收用户输入。然后,我们将用户输入的消息编码并使用公钥进行加密。加密后,我们将加密后的消息打印出来,并将其解密并打印。 总结 在本篇文章中,我们介绍了如何使用Python的cryptography库实现对称加密和非对称加密。对于对称加密,我们使用了Fernet算法,对于非对称加密,我们使用了RSA算法。这两种加密方式都是流行的加密方式,可以用于与数据安全相关的各种应用。