ホームページ >バックエンド開発 >Python チュートリアル >FastAPI でリクエストされたデータの暗号化と復号化を実装する方法

FastAPI でリクエストされたデータの暗号化と復号化を実装する方法

王林
王林オリジナル
2023-07-29 23:53:122400ブラウズ

FastAPI でリクエストされたデータの暗号化と復号化を実装する方法

はじめに:
FastAPI は、Python ベースの高性能 Web フレームワークであり、Web アプリを構築するための簡潔かつ高速な方法を提供します。開発プロセスでは、データ送信のセキュリティを確保するために、要求されたデータの暗号化と復号化が必要になることがよくあります。この記事では、リクエストされたデータの暗号化と復号化を FastAPI で実装する方法と、対応するコード例を紹介します。

ステップ 1: 必要な依存関係をインストールする
始める前に、必要な依存関係をいくつかインストールする必要があります。 pip を使用して、次のコマンドで必要な依存関係パッケージをインストールします。

pip install cryptography

ステップ 2: キーを生成する
暗号化および復号化のプロセスでは、キーの使用が必要です。この例では、暗号化と復号化に AES アルゴリズムを使用します。まず、キーを生成する必要があります。次のコードを使用して、新しいキーを生成できます。

from cryptography.fernet import Fernet

def generate_key():
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)

上記のコードを実行すると、現在のディレクトリに「key.key」という名前のファイルが生成され、生成されたキーが保存されます。

ステップ 3: リクエスト データの暗号化
FastAPI では、ミドルウェアを使用してリクエスト データを暗号化できます。以下はミドルウェアの例のコードです:

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

上記のコードでは、最初に以前に生成されたキーを読み取ります。次に、Fernet クラスを使用して暗号化操作を実行します。 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}

上記のコードでは、暗号化されたリクエストと復号化されたリクエストをそれぞれ受信するための 2 つのルートを追加しました。これら 2 つのルートは、data という名前の文字列パラメータを受け取り、それぞれ暗号化されたデータと復号化されたデータを返します。この例はデモンストレーションのみを目的としており、実際のプロジェクトはビジネス ニーズに基づいて適切に処理する必要があります。

結論:
上記の手順により、FastAPI でリクエスト データの暗号化と復号化プロセスを正常に実装できました。暗号化ミドルウェアを利用することで、データ通信時のセキュリティを確保できます。暗号化と復号化のプロセスは、実際のニーズに応じて変更および拡張できます。この記事が、FastAPI 開発におけるデータの暗号化と復号化の実装に役立つことを願っています。

参考資料:

  • [FastAPI公式ドキュメント](https://fastapi.tiangolo.com/)
  • [暗号公式ドキュメント](https:/ /cryptography.io/en/latest/)

以上がFastAPI でリクエストされたデータの暗号化と復号化を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。