gpt4 book ai didi

python - Django 加密 key 完整性

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:20 27 4
gpt4 key购买 nike

我正在实现一个 Django 网站,其中上传的文件在保存到服务器 (/media) 之前使用用户提供的 key 进行加密。当用户希望查看它们时,系统会提示他们输入 key ,加密文件被解密,然后显示给他们。这是我的加密/解密文件代码:

from Crypto import Random 
from Crypto.Cipher import AES
from Crypto.Hash import SHA256


def encryption_pad(string):
pad = b"\0" * (AES.block_size - len(string) % AES.block_size)
padded_string = string + pad
return padded_string

def encrypt_file(key, file):
with open(file, 'rb') as out:
byte_output = out.read()

hash = SHA256.new()
hash.update(key)

byte_output = encryption_pad(byte_output)
initialization_vector = Random.new().read(AES.block_size)
cipher = AES.new(hash.digest(), AES.MODE_CBC, initialization_vector)
encrypted_output = initialization_vector + cipher.encrypt(byte_output)

with open(file + ".enc", 'wb') as out:
out.write(encrypted_output)

def decrypt_file(file, key):
with open(file, 'rb') as input:
ciphertext = input.read()

hash = SHA256.new()
hash.update(key)

initialization_vector = ciphertext[:AES.block_size]
cipher = AES.new(hash.digest(), AES.MODE_CBC, initialization_vector)
decrypted_output = cipher.decrypt(ciphertext[AES.block_size:])
decrypted_output = decrypted_output.rstrip(b"\0")

with open(file[:-4], 'wb') as output:
output.write(decrypted_output)

我对安全性比较陌生,所以我的问题是:对于此设置, key 必须在服务器内存中存在一段时间,那么我的 views.py 函数将它们传递给此模块的正确方法是什么然后妥善处理?

最佳答案

关于如何在 Python 中安全地处理(或不处理)内存中对象存在一些问题:参见 herehere .

不过,如果安全性如此重要,您可能需要考虑一个更安全的选择:在客户端使用 Javascript 进行加密和解密。这样 key 永远不会通过网络发送,也永远不会存在于服务器上。例如,这就是 LastPass 的工作原理。

关于python - Django 加密 key 完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27257828/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com