我有一个加密数据库(MySQL),其中某些列需要由(非公开的,授权的)用户搜索。
我一直在阅读有关搜索数据库中加密字段的this article on Database SE。
我从阅读本文得出结论,最好的方法是使用列值的哈希值与给定数据进行比较,因此:
示例:
正在搜索电话号码。
HTML:用户输入电话号码以搜索
PHP:电话号码是哈希的 MySQL:搜索hashed_phone
列以进行比较(=
)并返回 匹配结果。
PHP:匹配结果行被解密,然后输出给用户。
鉴于我无法搜索部分电话号码的小警告(这在概念上是理想的但远远超出了这个特定问题的范围),我发现一个问题:
使用安全散列算法(password_hash
等)都使用salt作为最佳实践,而完全有意义 但是给了我一个问题如果我创建搜索词的哈希值加上盐,这会使哈希 与 不同,从存储的数据库值开始,我就不能使用比较运算符了从数据集中找到正确的行。
摘要: