在Node.js中搜索加密文本

时间:2017-11-04 19:13:23

标签: node.js

有没有最好的方法可以使用Node js在DB中搜索加密数据?

我将加密数据存储在DB中。如何通过代码搜索加密文本?

示例:

$ node encrypt.js 123 'hello my friend'
90cbf635540412a202eb46dada1fcf

$ node encrypt.js 123 'hello'
90cbf63554

$ node encrypt.js 123 ' my '
d8c3e379

$ node encrypt.js 123 'friend'
9edcf33c5540

1 个答案:

答案 0 :(得分:0)

您无法搜索加密文本 - 这首先会破坏加密文本的目的。正如您所注意到的,字符串的不同部分将加密到完全不同的值 - 这是设计或者它会使您的加密更容易破解。

可以做的是您要搜索的文本的哈希部分,并将这些哈希值存储在不同的表引用中,并将其存储回父级。

parent(加密字符串)

id        string
1         xyzxyzxyzxyzxyzxyz (encrypted 'hello my friend')

然后,您会将string分解为word个组件。

var words = string.split(' '); // words is an array of ['hello', 'my', 'friend']

迭代此数组并为每个words计算哈希值,然后将这些哈希值插入“索引”表中。

words(索引字哈希加密父级)

id     parent_id     hash
1      1             abc (hash of "hello")
2      1             def (hash of "my")
3      1             ghi (hash of "friend") 

此时,您可以将搜索查询组成不同的单词,计算其哈希值,然后为任何匹配项返回parent_id。请注意,这仅适用于完整的字词 - 任何变体都会更改计算的哈希值,因此您可能希望将所有内容强制为小写,例如。

假设您正在搜索“hello”,您将计算其“abc”的哈希值,然后运行以下SQL查询。

SELECT p.id, p.string 
FROM parent p
JOIN words w ON p.id = w.parent_id
WHERE w.hash IN ('abc')
GROUP BY p.id