【问题标题】:Search md5("cdef") in "abcdefgh"在“abcdefgh”中搜索 md5(“cdef”)
【发布时间】:2013-11-06 18:06:50
【问题描述】:

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

【问题讨论】:

  • 您是否为此与 md5 结婚,或者任何使搜索字符串不明显的转换(例如,rot13)?
  • 我不必使用 md5。你明白了。我只是想让搜索字符串不明显。有没有其他方法可以做到这一点?
  • 当然——如果你使用某种形式的可逆加密,问题就很简单(特别是如果它像 rot13 一样微不足道;-P)——只需在搜索之前解密字符串!如果您发布一个新问题,详细说明您要防止什么,人们将能够给您更好(和更具体)的想法 - 您为此付出的工作量主要取决于您对观察者的期望程度'希望阻止成为。

标签: search hash substring


【解决方案1】:

由于两个原因,无法做到这一点。

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

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

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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2021-11-19
    相关资源
    最近更新 更多