python - 如何在 django 中上传之前加密文件
问题描述
我正在构建一个项目安全文件共享。它在上传到本地计算机之前加密文件,如果用户有解密密钥,则在下载时解密。我被困在如何在上传到我的电脑之前加密文件
我正在遵循下面提到的这种方法。
https://ruddra.com/documentation-of-django-encrypt-file/#basic-usage
但我不知道如何链接我的代码。谁能帮我
视图.py
def upload(request):
context={}
if request.method == 'POST':
upload_file= request.FILES["document"]
fs=FileSystemStorage()
name=fs.save(upload_file.name, upload_file)
context['url'] = fs.url(name)
return render(request, 'accounts/upload.html',context)
上传.html
{% include 'accounts/main.html'%}
<pre>
Upload your files for sharing
</pre>
{% block content %}
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="document">
<button type="submit">Upload</button>
</form>
{% if url %}
<p> Uploaded file:<a href="{{ url }}">{{ url }}</a></p>
{% endif %}
{% endblock %}
设置.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL= '/media/'
解决方案
要在上传到服务器之前加密文件,这意味着您需要在浏览器中对其进行加密——例如使用 JavaScript。这是一个可以帮助您在 JS 中加密内容的线程: JavaScript AES 加密和解密(高级加密标准)
如果您愿意迎接挑战,请考虑在 WASM 中运行 AES 以加快加密速度(对于大文件很重要)。
请注意,在 Django 中,所有 python 代码都在服务器上执行。问题中的链接示例显示了如何在上传文件后加密服务器上的文件: https ://ruddra.com/documentation-of-django-encrypt-file/#basic-usage
请注意,在上传之前在浏览器上加密文件只是整个问题的一小部分。要拥有安全的文件共享服务,您可能希望有一种方法与需要解密它的其他用户共享密钥。为此,您可能需要使用非对称加密,例如,在上传之前使用其他用户的公钥包装(加密)密钥。
推荐阅读
- c# - C# 索引在生成 Json 对象时超出了数组的范围
- r - 问题加载数据“文件名转换问题 - 名称太长?”
- c# - 下拉列表不默认为选定项目
- c++ - 从 TChar* 中删除不可打印的 Unicode 字符
- ruby-on-rails - 无论上下文如何,如何在acts_as_taggable对象上获取*ALL*标签
- java - 通过 ideone 运行时,扫描仪上的 NoSuchElementException 有什么问题?
- azure - 在目录级别保护 MS Azure WebApp 访问?
- r - 循环写入时无法打开连接
- angular - 调用可能会或可能不会发出 http 请求的函数
- mysql - 树莓派 + 在 PhpMyAdmin 中没有权限