2013-10-28 29 views
1

我想搜索字符串中的子字符串,例如,在'abcdefgh'中搜索'cdef'。但我需要使用某種算法對子字符串進行預處理,以便隱藏它,以便沒有人知道我在搜索它。以md5()爲例。那麼在'abcdefgh'中搜索md5('cdef')的最快方法是什麼?在「abcdefgh」中搜索md5(「cdef」)

+1

您是否爲此而結婚至md5,或者是否會進行任何使搜索字符串非顯而易見的轉換(例如,rot13)? – Shog9

+0

我不必使用md5。你明白了。我只是想讓搜索字符串不明顯。有沒有其他方法可以完成這項工作? – colordancer

+1

當然 - 如果您使用某種形式的可逆加密,問題很容易(特別是如果它像rot13; -P一樣微不足道) - 只需在搜索前解密字符串!如果你發佈了一個新的問題,提供你想要阻止的細節,人們將能夠給你提供更好(更具體)的想法 - 你投入多少工作主要取決於你期望觀察者的決心'正在尋找挫敗。 – Shog9

回答

5

由於兩個原因,沒有辦法做到這一點。

  1. 在高層次上,有一個加密散列函數的整點同時也讓別人確認原始字符串散列爲正確的值的方式來掩蓋原始字符串的內容。加密哈希(即使MD5現在已經被破壞)具有這樣的特性,即使對輸入字符串進行微小的調整,也會對哈希的輸出產生巨大的改變,所以在子字符串的MD5和字符串本身之間應該沒有關聯。如果可以確定一個字符串在散列之後是否是另一個字符串的子字符串,那麼這將是一個巨大的安全漏洞,並且會完全使散列無效。

  2. 多個字符串可以具有相同的哈希碼,這意味着如果您只有一個字符串的MD5,就沒有辦法知道原始字符串是否是其他字符串的子字符串。您永遠無法區分具有子字符串MD5的情況或恰好碰巧與子字符串具有相同散列的非子字符串的MD5。

您需要從根本上改變您的方法才能使其發揮作用。

希望這會有所幫助!