Hash
是否有具有可變長度輸出的雜湊算法?
我知道例如 MD5 從給定的可變大小文本產生一個 128 位雜湊值。我的問題是,是否有一種類似雜湊的算法會產生一個可以指定結果長度的雜湊值?因此,可以指定給定任何輸入的雜湊值(輸出)應該是 1000 位。
例如,我想生成一個與輸入長度相同的雜湊值。我曾想過這樣做的一種方法是以某種方式加密輸入,但這可能很容易破解,因為只需解密。
我想到的另一種方法是將輸入分成 128 位塊,然後對每個部分執行 MD5(或其他雜湊),然後使用所有字元串的雜湊創建一個長字元串。但是,我可以看到一個字節的輸入變化只會改變輸出的 128 位。
正如 DW 所指出的,您可以使用任何傳統雜湊函式的輸出來加密流密碼(或 CTR 等流模式中的塊密碼),然後將密碼的輸出作為您的摘要。
然而,現代散列函式設計的趨勢是直接支持任意長度的輸出,而不需要額外的層。例如,加密海綿結構具有內置功能:您將輸入吸收到海綿中,然後根據需要從中擠出盡可能多的輸出。
在五個SHA-3 決賽入圍者中,有兩個——Skein和Keccak——支持任意輸出長度。Keccak 之所以這樣做,是因為它是一個海綿雜湊。相反,Skein 在內部使用了一個與 DW 的 CTR 模式結構非常相似的系統,將其 Threefish 可調整的分組密碼重新用於輸入壓縮和輸出生成。
SHA-3 競賽仍在進行,即使最初的賽程要求獲勝者在幾個月前就已經公佈。儘管如此,到目前為止,所有決賽選手都倖存下來的事實確實表明,他們很可能對於實際目的來說足夠安全。