将加密文件存储在数据库中
我正在使用PyCrypto把一些文件存储在一个SQLite数据库里。
我用到了4个字段:
文件名,
文件的大小(以字节为单位),
文件的SHA512哈希值,
加密后的文件(使用AES加密,然后用base64转成ASCII)。
我需要这些字段能显示文件的一些信息,而不需要解密文件。
我的问题是:这样存储数据安全吗?
比如,一个ZIP文件或者可执行文件的前几个字符总是一样的,如果你已经知道了文件的哈希值和大小……那是否有可能部分解密这个文件呢?
如果这样不安全,我该如何存储一些关于文件的信息,以便在不解密的情况下对文件进行索引?(比如文件大小、哈希值、名称、标签等信息)
(我使用Python,但你可以用任何语言举例)
4 个回答
3
用AES加密的数据和原始数据的长度是差不多的(可能会有一点额外的填充),所以知道原始数据的长度并不会影响安全性。SHA512是一种强大的加密哈希算法,设计的目的是尽量少地透露关于原始内容的信息,所以我觉得这里也没有什么问题。
因此,我认为你的方案是相当安全的。通过这种方式“暴露”的信息几乎可以忽略不计。其实,管理密钥可能会是一个更大的问题。
1
为了避免前几个字节相同带来的问题,你应该使用AES加密算法的分组密码模式,并且要用一个随机的初始化向量(IV)。这样,即使两个加密文件的第一个块(长度取决于密钥大小)完全相同,生成的密文也会不同。
如果你这样做的话,我觉得你的方法没有问题。