Sha-256
SHA-256 手動
是的,這需要幾天時間。我不著急,也不試圖解決任何問題……我只是喜歡數學。
有一個影片漂浮在周圍(引文/來源),有人手工進行第一輪 SHA-256。看起來很簡單,但我不知道第二輪會是什麼樣子。我是否使用上一輪的舊值?我是否使用更多的明文塊?
請不要只在我處引用維基百科的虛擬碼……我已經讀過了。做過。不是。幫助。
當我找到影片的連結時,我會更新。謝謝。
是的,下一輪使用上一輪的舊值。
對於 64 輪中的前 16 輪,下一輪確實使用下一個 32 位的明文塊(要散列的消息),如果那是 512 位或更多;但總的來說事情更複雜,因為在一輪中處理的是填充消息的塊而不是實際消息,並且該塊經歷了對接下來的 64 輪中的 48 輪很重要的轉換。
SHA-256 可以描述如下:
設置 8 個 32 位寄存器的向量 $ S[,] $ 到某個初始值
對於每個 $ \lceil(L+65)/512\rceil $ 要散列的填充消息的 512 位塊(由長度為的消息組成 $ L $ 位,單個
1
位, $ 511-(L+65\bmod 512) $0
位,以及大端二進制中的 64 位表示 $ L $ )
- 將該填充的純文字塊複製到 16 個 32 位寄存器的向量中 $ W[,] $ 每個大端二進制
- 複製整個 $ S[,] $ 進入 $ T[,] $
- 64輪中的每一輪 $ r $ 從 $ 0 $ 至 $ 63 $
- 如果 $ r\ge16 $
- 轉換 $ W[,] $ 以某種方式涉及 4 次旋轉、2 次移位、4 次 XOR 和 3 次加法模 $ 2^{32} $ (全部超過 32 位數量)
- 轉換 $ S[,] $ 以某種方式涉及 32 位值 $ W[r\bmod16] $ (因此與 64 輪中前 16 輪的填充消息一致),一個 32 位常量 $ K[r] $ , 6 個旋轉, 4 個 XOR, 7 個加法模 $ 2^{32} $ ,以及選擇和多數三元按位函式的評估(全部超過 32 位數量)
- 添加 8 個組件中的每一個 $ T[,] $ 進入 $ S[,] $ , 模組 $ 2^{32} $
雜湊是 $ S[,] $ 每個 32 位寄存器按 big-endian 二進製表示,形成一個 256 位位串。