将加密文件存储在数据库中

时间:2011-05-07 07:56:34

标签: python database security encryption

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

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

我需要所有字段来显示有关该文件的一些信息而不对其进行解密。

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

如果它不安全,我如何存储有关文件的一些信息来索引文件而不解密它们? (长度,哈希,名称,标签等信息)

(我使用python,但您可以用任何语言提供示例)

4 个答案:

答案 0 :(得分:3)

使用AES加密的数据与普通数据的长度相同(给出或采用一些块填充),因此给出原始长度不会损害安全性。 SHA512是一个强大的加密哈希设计,提供有关原始内容的最少信息,所以我也没有看到这里的问题。

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

答案 1 :(得分:1)

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

如果你这样做,我认为你的做法没有问题。

答案 2 :(得分:1)

你不能只说“哦,它的AES-256当然是安全的。”只是通过你的帖子我可以看到你对流密码和分组密码的混乱攻击,所以你可能应该实现这个,直到你真正研究这个主题。

话虽如此,你必须阅读block cipher modes of operation。整个CWE-310家庭。拿起一份海盗密码学并不会有什么坏处。在所有这些之后,仍然有足够的空间让你彻底搞砸了。

真正的解决方案:使用某人的实施

答案 3 :(得分:0)

你真的需要考虑你想要防范的攻击,以及可能的攻击者的资源。

通常,存储一些加密数据只有在满足您的确切要求时才有用。特别是,如果攻击者有可能在与数据同时破坏密钥的方式,那么加密实际上是无用的。