有没有最好的方法可以使用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
答案 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