Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django AES加密:如何在保存用户上传的文件之前对其进行加密?_Django_Python 3.x_Encryption - Fatal编程技术网

Django AES加密:如何在保存用户上传的文件之前对其进行加密?

Django AES加密:如何在保存用户上传的文件之前对其进行加密?,django,python-3.x,encryption,Django,Python 3.x,Encryption,我想在保存之前在django中加密用户上传的文件 当用户通过POST请求发送文件时,我得到一个“InMemoryUploadedFile”类型的对象 如何在保存文件之前对其进行加密?我目前使用pyAesCrypt加密文件,但无法将“InMemoryUploadedFile”对象传入。我仅在使用以下工具保存后才对其进行加密: import pyAesCrypt with open("*FileName*", "rb") as InputFile: with open("*OutputFi

我想在保存之前在django中加密用户上传的文件

当用户通过POST请求发送文件时,我得到一个“InMemoryUploadedFile”类型的对象

如何在保存文件之前对其进行加密?我目前使用pyAesCrypt加密文件,但无法将“InMemoryUploadedFile”对象传入。我仅在使用以下工具保存后才对其进行加密:

import pyAesCrypt

with open("*FileName*", "rb") as InputFile:
    with open("*OutputFileName*", "wb+") as OutputFile:
        pyAesCrypt.encryptStream(InputFile, OutputFile, Password, BufferSize)

我最近问了这个问题,一个用户告诉我使用一个有更好社区支持的软件包。它是pyca/cryptography。我陷入了同样的困境,我找到了解决办法。注意,我使用Django Rest框架

from cryptography.fernet import Fernet
# Generate a key and store safely
key = Fernet.generate_key()
f = Fernet(key)
我将以excel文件为例,但实际上您可以使用任何文件

import pandas as pd
import io
from django.core.files.uploadedfile import SimpleUploadedFile

# Request file from user and load the file into a dataframe
df = pd.read_excel(request.FILES('file_name'))
# Create BytesIO
output = io.BytesIO()
# Output df to BytesIO
df.to_excel(output, index=False)
# Encrypt data (BytesIO)
encrypted_out = f.encrypt(output.getvalue())
# Export encrypted file
output_file = SimpleUploadedFile('<some_file_name.extension>',encrypted_out)
# Typically you would pass this through a serializer.
将熊猫作为pd导入
输入io
从django.core.files.uploadedfile导入SimpleUploadedFile
#向用户请求文件并将文件加载到数据帧中
df=pd.read\u excel(request.FILES('file\u name'))
#创建字节
输出=io.BytesIO()
#输出df到BytesIO
df.to_excel(输出,索引=False)
#加密数据(字节)
encrypted_out=f.encrypt(output.getvalue())
#导出加密文件
输出文件=SimpleUploadedFile(“”,加密输出)
#通常,您会将其传递给序列化程序。

在向用户提供服务之前解密文件。读取文件并将其写入BytesIO,然后您可以将文件提供给用户。

您是否在MemoryUploadedFile中加密和解密了?我在解密时得到空字符串