Hash

在散列函式的上下文中,“位”是什麼意思?

  • January 9, 2020

雜湊函式中的“位”是什麼意思?

我開始研究雜湊函式,但我仍然不明白這些位的含義。

說 MD5 是 128 位或 SHA-1 是 160 位是什麼意思?這是如何計算的?

那是指散列函式的輸出或消息摘要的大小。MD5 輸出一個 128 位的雜湊值。或者:有 $ 2^{128} $ 可能的輸出。

在 Python 中:

>> md5("hello, world").hexdigest()
'e4d7f1b4ed2e42d15898f4b27b019da4'

您可以看到代表 16 個字節或 128 位的 32 個十六進制 (hex) 數字。這是二進制的值;有 128 $ 0 $ 沙 $ 1 $ s,或表示位的二進制數字:

 11100100110101111111000110110100111011010010111001000010110100010101100010011000111101001011001001111011000000011001110110100100

要計算,只需計算它們!

同樣,對於 SHA-1,您有 160 位、20 個字節或 40 個十六進制數字。有 $ 2^{160} $ 可能的輸出:

>> sha1("hello, world").hexdigest()
'b7e23ec29af22b0b4e41da31e868d57226121c84'

雜湊的輸出大小與可以達到的最大安全級別直接相關。如果生日問題適用,例如如果雜湊在上面的字元串上,則安全級別是位的一半。如果不是這種情況,那就是全額。

請注意,對於大多數使用場景,MD5 和 SHA-1 都被認為是損壞的,因此上述計算不再適用於它們。提供的安全量遠低於輸出大小所建議的量。

一個十六進制數字是一個半字節(4 位)。兩個半字節組成 8 位,也稱為 1 字節。

MD5 生成一個輸出(128 位),它使用 32 個十六進制數字的序列表示,而這些數字又是 32*4=128 位。128 位構成 16 字節(因為 1 字節是 8 位)。

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