将 Fernet 加密与 Python 的 requests 模块一起使用,安全地传输数据

2023-03-29 00:00:00 模块 传输 加密

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

程序将对数据进行加密,并将加密后的数据发送到服务器。服务器将对数据进行解密,并将解密后的数据返回给客户端。最后,客户端程序将打印服务器返回的解密结果。

相关文章