>  기사  >  백엔드 개발  >  FastAPI에서 요청된 데이터 암호화 및 암호 해독을 구현하는 방법

FastAPI에서 요청된 데이터 암호화 및 암호 해독을 구현하는 방법

王林
王林원래의
2023-07-29 23:53:122339검색

FastAPI에서 요청된 데이터 암호화 및 암호 해독을 구현하는 방법

소개:
FastAPI는 Python 기반의 고성능 웹 프레임워크로, 웹 애플리케이션을 구축하는 간결하고 빠른 방법을 제공합니다. 개발 과정에서 데이터 전송의 보안을 보장하기 위해 요청된 데이터를 암호화하고 해독해야 하는 경우가 많습니다. 이 기사에서는 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 메소드를 호출하여 요청된 데이터를 암호화할 수 있습니다. 마지막으로 요청된 데이터를 업데이트하고 요청 처리를 계속합니다. 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

4단계: 요청 데이터 해독

암호화된 요청 데이터를 처리하기 전에 이를 해독해야 합니다. 미들웨어 예시의 코드는 다음과 같습니다.
rrreee

암호화 프로세스와 유사하게 먼저 키를 읽은 다음 Fernet 클래스를 사용하여 암호 해독 작업을 수행합니다. decrypt 메소드를 호출하면 암호화된 요청 데이터를 해독할 수 있습니다. 마지막으로 요청된 데이터를 업데이트하고 요청 처리를 계속합니다.

5단계: 암호화 및 복호화 프로세스 테스트
    위 코드를 사용하여 암호화 및 복호화 미들웨어를 구현한 후 요청 데이터를 정상적으로 암호화 및 복호화할 수 있는지 테스트해야 합니다. 다음은 빠른 테스트를 위한 코드 예입니다.
  • rrreee
  • 위 코드에서는 암호화된 요청과 해독된 요청을 각각 수신하는 두 개의 경로를 추가했습니다. 이 두 경로는 data라는 문자열 매개변수를 수신하고 각각 암호화된 데이터와 해독된 데이터를 반환합니다. 이 예는 단지 데모용이므로 실제 프로젝트는 비즈니스 요구에 따라 적절히 처리되어야 합니다.
  • 결론:
위 단계를 통해 FastAPI에서 요청 데이터의 암호화 및 복호화 프로세스를 성공적으로 구현했습니다. 암호화 미들웨어를 사용하여 데이터 전송 중 보안을 보장할 수 있습니다. 암호화 및 복호화 프로세스는 실제 필요에 따라 변경 및 확장될 수 있습니다. 이 기사가 FastAPI 개발에서 데이터 암호화 및 암호 해독을 구현하는 데 도움이 되기를 바랍니다. 🎜🎜참고 자료: 🎜🎜🎜[FastAPI 공식 문서](https://fastapi.tiangolo.com/)🎜🎜[암호화 공식 문서](https://cryptography.io/en/latest/)🎜🎜

위 내용은 FastAPI에서 요청된 데이터 암호화 및 암호 해독을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.