Hash
流式雜湊函式
好的,所以我們對由流密碼建構的雜湊(不是一個好主意)和由雜湊構成的流密碼(是的,當然,使用計數器模式)有疑問。我想問的是相關的,但以前似乎沒有被問過。
是否可以製作流式雜湊?對於“流式散列”,我的意思是散列函式,其狀態會針對每個單獨的字節進行更新,而不是必須記憶體字節本身,直到知道完整的消息塊。
或者,為了扭轉問題,是否需要始終將消息拆分為塊而不是處理字節?或者這只是雜湊內部使用的函式的產物?
正如評論中提到的 CodesInChaos ,您可以簡單地將摘要塊的大小設置為一個字節(或位,如果您願意的話)。同樣如評論中所述,這不一定適用於任何給定的散列結構。
是否需要始終將消息拆分為塊而不是處理字節?
我不確定您將如何處理任何輸入而不將其分解為某種塊。考慮到塊可以是通常由所討論的算法定義的任意大小,塊的範圍可以從 1 位到構成完整輸入消息的任意多位。一位是有效的塊大小,一個字節是有效的塊大小,任何 X 和 Y 的 XY 位字都是有效的塊大小。
所以我會說是的,將消息分成塊進行處理是不可避免的。您輸入壓縮函式的任何長度的輸入都構成一個塊。這似乎是不可避免的,除非您根本不壓縮任何輸入。即使您一次壓縮整個消息,您仍然在處理一個塊。
這只是雜湊內部使用的函式的產物嗎
塊大小影響壓縮函式的性能。如果您使用 X 指令一次消化 512 位,顯然這將比使用相同的 X 指令一次消化 1 位更快地消化數據。這假設 CPU 具有適當大小的寄存器和指令,用於在所需字長上進行操作 - 不一定是這種情況。