我想搜索字符串中的子字符串,例如在'abcdefgh'中搜索'cdef'。但是我需要使用某种算法对子字符串进行预处理以隐藏它,以便没人知道我搜索它。以md5()为例。那么在'abcdefgh'中搜索md5('cdef')的最快方法是什么?
答案 0 :(得分:5)
由于两个原因,无法做到这一点。
在较高的层面上,具有加密哈希函数的整个要点是隐藏原始字符串的内容,同时给予其他人确认原始字符串哈希值为正确值的方法。加密哈希(即使MD5现已被破坏)具有这样的属性,即使对输入字符串进行微小调整也会导致哈希输出发生巨大变化,因此子字符串的MD5与字符串本身之间不应存在相关性。如果可以确定字符串在散列之后是否是另一个字符串的子字符串,那么它将是巨大的安全漏洞并且会使散列完全无效。
多个字符串可以具有相同的哈希码,这意味着如果您只拥有字符串的MD5,则无法知道原始字符串是否是某个其他字符串的子字符串。您永远无法区分具有子字符串的MD5或非子字符串的MD5的情况,这些情况恰好与子字符串具有相同的哈希值。
您需要从根本上改变您的方法以使其发挥作用。
希望这有帮助!