所以我在表格中加密了记录,我想搜索这些记录。问题是,当我再次搜索并加密我的搜索词时,它会再次对其进行加密,生成不同的随机字符串。
有没有办法加密数据,以便在再次加密相同的数据时,它会产生与第一次加密时相同的字符串?
示例:我正在使用CI加密库的默认设置
$data = "ABC";
$stored_data = $this->encryption->encrypt( $data );
$search = "ABC";
$search_data = $this->encryption->encrypt( $data );
if( $search_data == $stored_data ){
var_dump("Found it");
}else{
var_dump("No results");
}
以上产生不同的随机字符串,因此无法搜索加密数据。有没有解决这类问题的方法
答案 0 :(得分:0)
正如Narf在评论中所说,“无法搜索正确加密的数据”。要完全理解为什么是这样,请阅读initialization vectors,然后认识到正确实现的加密使用了随机初始化向量。
但是,您可以使用称为blind indexing的技术来解决此限制,该技术允许在明文的确定性转换之上构造Bloom过滤器(由截断的加密哈希函数和/或密钥派生函数制成) ,可以在SELECT查询中使用。
如果您要查找实现,请查看CipherSweet。
答案 1 :(得分:0)
我知道这很晚了,但我也处于类似情况。我能看到的唯一解决方案是存储数据的单独的哈希版本,然后进行查找。它确实创建了额外的数据存储,但是如果您仅将其存储在不应该太糟的特定字段中。您必须确保在搜索时与存储的完全完全匹配,否则它将不起作用(因此,有必要降低Hash和Search值以确保准确匹配)。根据数据的安全性-选择正确的哈希值将是关键,同时良好的索引也将提高速度。在加密的字符串中添加盐也将使您的数据更安全。