将 Fernet 加密与 Python 的 requests 模块一起使用,安全地传输数据
Fernet 是 Python 中一个很好用的加密模块,我们可以将它与 requests 模块一起使用,来安全地传输数据。在这个例子中,我们将使用 requests 模块将加密的数据发送到服务器,并在服务器上进行解密。
首先,我们需要在服务器端生成一个随机密钥,并将其存储到一个文件中。我们可以使用 Fernet 的 generate_key() 方法生成一个随机密钥,然后将其存储到文件中。
from cryptography.fernet import Fernet # 生成随机密钥 key = Fernet.generate_key() # 将密钥保存到文件中 with open('key.key', 'wb') as f: f.write(key)
然后,我们可以在客户端中读取密钥,并使用 Fernet 对数据进行加密。在这个例子中,我们将使用 requests.post() 方法将加密后的数据发送到服务器。
import requests from cryptography.fernet import Fernet # 读取密钥 with open('key.key', 'rb') as f: key = f.read() # 创建 Fernet 对象 fernet = Fernet(key) # 需要加密的数据 data = 'pidancode.com' # 对数据进行加密 encrypted_data = fernet.encrypt(data.encode()) # 发送加密后的数据到服务器 url = 'http://localhost:8000/decrypt' r = requests.post(url, data=encrypted_data) # 打印服务器返回的解密结果 print(r.text)
在服务器端,我们需要读取密钥,并使用 Fernet 对数据进行解密。在这个例子中,我们将使用 Flask 框架来实现一个简单的解密接口。
from flask import Flask, request from cryptography.fernet import Fernet app = Flask(__name__) # 读取密钥 with open('key.key', 'rb') as f: key = f.read() # 创建 Fernet 对象 fernet = Fernet(key) @app.route('/decrypt', methods=['POST']) def decrypt(): encrypted_data = request.data # 对数据进行解密 decrypted_data = fernet.decrypt(encrypted_data).decode() return decrypted_data if __name__ == '__main__': app.run(port=8000)
在这个例子中,我们在 Flask 应用程序中创建了一个解密接口 /decrypt,接收 POST 请求并返回解密后的数据。需要注意的是,在实际应用中,我们可能需要对解密后的数据进行进一步的验证和处理,以保证数据的安全性和完整性。
在运行客户端程序之前,我们需要先启动服务器程序。在命令行中执行以下命令:
python server.py
然后,在另一个命令行窗口中执行客户端程序:
python client.py
程序将对数据进行加密,并将加密后的数据发送到服务器。服务器将对数据进行解密,并将解密后的数据返回给客户端。最后,客户端程序将打印服务器返回的解密结果。
相关文章