Implementation
使用負值/無符號整數來實現 SHA-2
如果我們允許使用負值實現 SHA-2 會發生什麼?
如果在第一輪中使用負值會發生什麼?該算法是否仍會產生安全值?
我對數學是如何工作的有一個基本的了解。但是,在我編寫自己的函式之前 - 有人可以指出他們是否有使用負值的經驗嗎?
SHA-256 中的 32 位值是無符號整數,這意味著它們只允許具有 0 到 4,294,967,295 之間的值,不允許有負值。
如果您查看第 4 個初始值 (0xa54ff53a),它的整數值為 2,773,480,762。在沒有 32 位無符號整數而是有符號整數的程式語言中實現 SHA-256 會導致該值被解釋為 -1,521,486,534,但該值的位仍然相同。
對於模組化加法,這不是問題(參見二進制補碼),但可能是移位和旋轉的問題,這需要在所有 32 位上執行,而不僅僅是低 31 位。異或也不關心是否數字不是有符號的,並且由於 SHA-2 僅使用加法、異或和移位(因此旋轉),因此可以在僅支持無符號整數的程式語言中實現 SHA-256,如果你有可能會慢一點通過移位有符號整數來處理旋轉,就像在 Visual Basic 6 中一樣。