在数据库中存储加密文件

2024-06-16 08:39:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用PyCrypto在SQLITE数据库中存储一些文件。在

我使用4个字段:
文件名,
文件的长度(以字节为单位)
文件的SHA512哈希值
加密文件(使用AES,然后将base64转换为ASCII)。

我需要所有的字段显示一些有关文件的信息,而不解密它。在

问题是:像这样存储数据安全吗?
例如,ZIP文件或可执行文件的第一个字符总是相同的,如果您已经知道文件的哈希和长度。。。有没有可能解密文件,也许是部分?在

如果不安全,如何存储有关文件的信息以索引文件而不解密?(长度、哈希、名称、标记等信息)

(我用python,但你可以用任何语言举例)


Tags: 文件信息数据库可执行文件sqlite字节文件名ascii
3条回答

用AES加密的数据与普通数据具有相同的长度(给予或接受一些块填充),因此放弃原始长度不会损害安全性。SHA512是一个强大的加密哈希,设计为提供关于原始内容的最小信息,因此我也不认为这有什么问题。在

因此,我认为你的计划是安全的。任何被它“暴露”的信息都可以忽略不计。无论如何,密钥管理可能是一个更大的问题。在

为了避免任何与前几个字节相同的问题,您应该在随机IV的分组密码模式下使用AES。这可以确保即使两个加密文件的第一个块(长度取决于密钥大小)完全相同,密码文本也会不同。在

如果你那样做,我看你的方法没有问题。在

你不能只说“它的AES-256当然是安全的。”就在你的帖子中,我可以看到你对流密码和分组密码的令人困惑的攻击,所以你可能应该而不是在你真正研究这一主题之前实现这一点。在

也就是说你必须阅读block cipher modes of operation。整个CWE-310家族。拿一份盗版密码也没什么坏处。在所有这些之后,你还有足够的空间让你把事情搞得一团糟。在

真正的解决方案:使用其他人的实现。在

相关问题 更多 >