fastapi 取消息体(结尾无换行)按UTF-8编码字节数据,使用密钥和IV对得到的消息体字节数据做AES/CTR/PKCS5Padding加密,得到加密后字节数据
时间: 2024-03-22 19:40:26 浏览: 41
下面是使用FastAPI框架获取请求体,并进行AES/CTR/PKCS5Padding加密的示例代码:
```python
from fastapi import FastAPI, Body
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
app = FastAPI()
@app.post("/encrypt")
async def encrypt_message(message: bytes = Body(...), key: bytes = Body(...), iv: bytes = Body(...)):
cipher = AES.new(key, AES.MODE_CTR, nonce=iv)
padded_message = pad(message, AES.block_size, style='pkcs7')
encrypted_message = cipher.encrypt(padded_message)
return {"encrypted_message": base64.b64encode(encrypted_message).decode('utf-8')}
```
在上述代码中,我们使用FastAPI的`Body`类来获取请求体,并使用`bytes`类型来表示二进制数据。然后,我们使用PyCryptodome库中的`AES`类创建一个AES加密器,并使用传入的密钥和IV对其进行初始化。接着,我们使用`pad`函数来对消息进行填充,以保证其长度是AES分组长度的整数倍,并使用`pkcs7`填充模式进行填充。最后,我们使用加密器的`encrypt`方法对填充后的消息进行加密,并将加密后的数据进行Base64编码后返回给客户端。
阅读全文