Hash

如果 SHA-256 輸入太長(超過 512 位)會怎樣?

  • January 26, 2018

我的理解是:當我們將消息解析為 512 位消息塊時。然後我們將第一個消息塊擴展為 64 條目數組並從壓縮函式開始。

如果消息長度超過 512 位會發生什麼?結果,我們會收到幾個消息塊,但是這些消息塊在哪裡輸入到函式中。

您的問題本質上是Merkle-Damgård 構造中如何處理消息長度。但是,您的描述有缺陷,所以讓我們澄清一些事情:

使用這種結構的全部意義在於建構一個散列函式,將任意長度的輸入映射到固定長度的輸出,給定一個壓縮函式(希望是抗碰撞的,等等)。

首先輸入消息被分成 $ n $ 大小相等的塊-按照您的範例,假設此塊大小為 512 位(如 MD5 和較小的 SHA-2 算法)。然後,消息被“填充”(擴展)直到總消息長度

$ l_{msg} \equiv 448 $ 反對 $ 512 $

最後,添加了對最後一個塊的 64 位擴展,這本質上是初始消息長度的表示。現在都 $ n $ 塊正好是 512 位。隨後,壓縮函式在所有塊上循環應用,在每一輪中,它將目前塊和前一輪的結果作為輸入。後 $ n $ 迭代,產生最終的雜湊值。

如果消息長度超過 512 位會發生什麼?

一旦您的消息長度超過 448 位,就需要第二個塊。所以更長的消息只會增加塊的數量,因此需要循環迭代。

引用自:https://crypto.stackexchange.com/questions/54852