验证加密数据库中的字符串存在

时间:2012-03-21 18:47:22

标签: database encryption

对于我正在设计的系统,我希望能够验证特定字符串是否有效'或不,但我想保持我的数据库有效'字符串私有。

我想为客户端提供所有有效字符串的数据库,但此数据库是(单向)加密的。我不愿意将密钥分发给客户端,因为总有办法从我的程序的汇编代码中获取特定的密钥(我猜)。

客户端必须能够在我的程序中输入字符串,并且它会根据加密文件中字符串的存在返回一个布尔值。

更重要的是,我希望我的程序能够轻松检查字符串是否在文件中,但我想阻止其他程序轻松使用(和/或重建)数据库。

我有点抽象,因为我真的不知道我的系统会如何看待,但我想知道这样的事情是否可行。

1 个答案:

答案 0 :(得分:4)

您正在寻找的是加密哈希函数! MD5和SHA1是众所周知的示例,但是如果您在没有严格性能限制的情况下构建新代码,那么SHA256将是您要选择的代码,如果您希望使其非常难以恢复原始的单词,你可能想要考虑scrypt或bcrypt(虽然它们不是那么流行且不太可能你的语言将它们包含在标准库中)。

然后你的数据库就像一组无序的哈希一样简单,就像(在Python中):

>>> words = ["secret", "hidden"]
>>> db = set([hashlib.sha256(word).hexdigest() for word in words])
>>> db
set(['2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b', 'e564b4081d7a9ea4b00dada53bdae70c99b87b6fce869f0c3dd4d2bfa1e53e1c'])
>>> def word_exists(word):
...     return hashlib.sha256(word).hexdigest() in db
...
>>> word_exists("hello")
False
>>> word_exists("hidden")
True