Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie die Verschlüsselung und Entschlüsselung angeforderter Daten in FastAPI

So implementieren Sie die Verschlüsselung und Entschlüsselung angeforderter Daten in FastAPI

王林
王林Original
2023-07-29 23:53:122301Durchsuche

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

Schritt 4: Anfragedaten entschlüsseln

Bevor wir die verschlüsselten Anfragedaten verarbeiten, müssen wir sie entschlüsseln. Hier ist der Code für eine Beispiel-Middleware:
rrreee

Ähnlich wie beim Verschlüsselungsprozess lesen wir zuerst den Schlüssel und verwenden dann die Fernet-Klasse, um den Entschlüsselungsvorgang durchzuführen. Durch Aufrufen der Methode 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üsselungsprozess
    Nachdem wir den obigen Code zur Implementierung der Verschlüsselungs- und Entschlüsselungs-Middleware verwendet haben, müssen wir testen, ob die Anforderungsdaten normal verschlüsselt und entschlüsselt werden können. Hier ist ein Codebeispiel für einen Schnelltest:
  • rrreee
  • Im obigen Code haben wir zwei Routen hinzugefügt, um verschlüsselte bzw. entschlüsselte Anfragen zu empfangen. Diese beiden Routen empfangen einen String-Parameter namens data 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.
  • Fazit:
Durch die oben genannten Schritte haben wir den Ver- und Entschlüsselungsprozess von Anforderungsdaten in FastAPI erfolgreich implementiert. Durch den Einsatz von Verschlüsselungs-Middleware können wir die Sicherheit bei der Datenübertragung gewährleisten. Der Prozess der Ver- und Entschlüsselung kann je nach tatsächlichem Bedarf geändert und erweitert werden. Ich hoffe, dass dieser Artikel Ihnen bei der Implementierung der Datenverschlüsselung und -entschlüsselung in der FastAPI-Entwicklung hilfreich sein wird. 🎜🎜Referenzmaterialien: 🎜🎜🎜[Offizielles FastAPI-Dokument](https://fastapi.tiangolo.com/)🎜🎜[Offizielles Kryptographiedokument](https://cryptography.io/en/latest/)🎜🎜

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn