1

我想在一个字符串中搜索一个子字符串,例如在'abcdefgh' 中搜索'cdef'。但是我需要使用某种算法预处理子字符串以隐藏它,这样没人知道我搜索它。以 md5() 为例。那么在 'abcdefgh' 中搜索 md5('cdef') 的最快方法是什么?

4

1 回答 1

5

没有办法做到这一点有两个原因。

  1. 在高层次上,拥有加密散列函数的全部意义在于隐藏原始字符串的内容,同时为其他人提供一种确认原始字符串散列到正确值的方法。加密哈希(即使 MD5 现在已损坏)具有即使对输入字符串进行微小调整也会导致哈希输出发生巨大变化的属性,因此子字符串的 MD5 与字符串本身之间不应存在相关性。如果可以确定一个字符串在散列之后是否是另一个字符串的子字符串,这将是一个巨大的安全漏洞,并且会使散列完全无效。

  2. 多个字符串可以具有相同的哈希码,这意味着如果您只有一个字符串的 MD5,则无法知道原始字符串是否是某个其他字符串的子字符串。您永远无法区分您拥有子字符串的 MD5 或非子字符串的 MD5 碰巧与子字符串具有相同哈希值的情况。

你需要从根本上改变你的方法才能让它发挥作用。

希望这可以帮助!

于 2013-10-28T03:40:01.893 回答