So implementieren Sie die Verschlüsselung und Entschlüsselung angeforderter Daten in FastAPI
Einführung:
FastAPI ist ein leistungsstarkes Web-Framework auf Basis von Python, das eine übersichtliche und schnelle Möglichkeit zum Erstellen von Webanwendungen bietet. Während des Entwicklungsprozesses müssen wir häufig die angeforderten Daten ver- und entschlüsseln, um die Sicherheit der Datenübertragung zu gewährleisten. In diesem Artikel wird erläutert, wie die Verschlüsselung und Entschlüsselung angeforderter Daten in FastAPI implementiert wird, und es werden entsprechende Codebeispiele bereitgestellt.
Schritt 1: Erforderliche Abhängigkeiten installieren
Bevor wir beginnen, müssen wir einige notwendige Abhängigkeiten installieren. Verwenden Sie pip, um die erforderlichen Abhängigkeitspakete mit dem folgenden Befehl zu installieren:
pip install cryptography
Schritt 2: Schlüssel generieren
Schlüssel sind sowohl für Verschlüsselungs- als auch für Entschlüsselungsprozesse erforderlich. Im Beispiel verwenden wir den AES-Algorithmus zur Ver- und Entschlüsselung. Zuerst müssen wir einen Schlüssel generieren. Sie können den folgenden Code verwenden, um einen neuen Schlüssel zu generieren:
from cryptography.fernet import Fernet def generate_key(): key = Fernet.generate_key() with open("key.key", "wb") as key_file: key_file.write(key)
Nachdem Sie den obigen Code ausgeführt haben, wird im aktuellen Verzeichnis eine Datei mit dem Namen „key.key“ generiert, in der der generierte Schlüssel gespeichert wird.
Schritt 3: Anfragedaten verschlüsseln
In FastAPI kann Middleware verwendet werden, um die Verschlüsselung von Anfragedaten zu implementieren. Das Folgende ist der Code einer Beispiel-Middleware:
from fastapi import FastAPI, Request app = FastAPI() @app.middleware("http") async def encrypt_request_data(request: Request, call_next): # 读取密钥 with open("key.key", "rb") as key_file: key = key_file.read() # 获取请求数据 data = await request.body() # 加密数据 f = Fernet(key) encrypted_data = f.encrypt(data) # 更新请求数据 request._body = encrypted_data # 继续处理请求 response = await call_next(request) return response
Im obigen Code lesen wir zunächst den zuvor generierten Schlüssel. Verwenden Sie dann die Fernet-Klasse, um Verschlüsselungsvorgänge durchzuführen. Durch den Aufruf der Methode encrypt
können wir die angeforderten Daten verschlüsseln. Aktualisieren Sie abschließend die angeforderten Daten und setzen Sie die Bearbeitung der Anfrage fort. encrypt
方法,我们可以将请求的数据加密。最后,更新请求的数据,并继续处理请求。
步骤4:解密请求数据
在处理加密的请求数据之前,我们需要解密它们。以下是一个示例中间件的代码:
@app.middleware("http") async def decrypt_request_data(request: Request, call_next): # 读取密钥 with open("key.key", "rb") as key_file: key = key_file.read() # 获取请求数据 data = await request.body() # 解密数据 f = Fernet(key) decrypted_data = f.decrypt(data) # 更新请求数据 request._body = decrypted_data # 继续处理请求 response = await call_next(request) return response
与加密过程类似,我们首先读取密钥,然后使用Fernet类进行解密操作。通过调用decrypt
方法,我们可以将加密的请求数据解密。最后,更新请求的数据,并继续处理请求。
步骤5:测试加密和解密过程
使用上述代码实现了加密和解密中间件后,我们需要测试一下是否能够正常加密和解密请求数据。以下是一个快速测试的代码示例:
from fastapi import FastAPI app = FastAPI(debug=True) @app.post("/api/encrypt") async def encrypt_data(data: str): return {"encrypted_data": data} @app.post("/api/decrypt") async def decrypt_data(data: str): return {"decrypted_data": data}
在上述代码中,我们添加了两个路由,分别用于接收加密和解密的请求。这两个路由接收一个名为data
Bevor wir die verschlüsselten Anfragedaten verarbeiten, müssen wir sie entschlüsseln. Hier ist der Code für eine Beispiel-Middleware:
rrreee
decrypt
können wir die verschlüsselten Anforderungsdaten entschlüsseln. Aktualisieren Sie abschließend die angeforderten Daten und setzen Sie die Bearbeitung der Anfrage fort. Schritt 5: Testen Sie den Verschlüsselungs- und Entschlüsselungsprozessdata
und geben verschlüsselte bzw. entschlüsselte Daten zurück. Dieses Beispiel dient nur zu Demonstrationszwecken. Tatsächliche Projekte müssen entsprechend den Geschäftsanforderungen verarbeitet werden. Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Verschlüsselung und Entschlüsselung angeforderter Daten in FastAPI. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!