Checksum

cksum 返回的可能值範圍

  • November 27, 2013

我正在尋找可能返回的值的範圍cksum。例如

echo -n '/my/path/filename' | cksum | cut -d' ' -f1

返回2379496500。可以返回的可能值的範圍(最小值和最大值)是多少?

順便說一句,上面的參數是完全限定文件路徑的字元串值,而不是由此指定的文件的內容。

POSIX 標準cksum指定了. 我在這裡引用相關部分(強調我的):

CRC 校驗和的編碼由生成多項式定義:

G(x)=x 32 +x 26 +x 23 +x 22 +x 16 +x 12 +x 11 +x 10 +x 8 +x 7 +x 5 +x 4 +x 2 +x+1

在數學上,對應於給定文件的 CRC 值應由以下過程定義:

要評估的 n 位被認為是 n-1 次的 mod 2 多項式 M(x) 的係數。這 n 位是文件中的位,最高有效位是文件第一個八位字節的最高有效位,最後一位是最後一個八位字節的最低有效位,用零位(如果需要)填充以獲得整數個八位位組,後跟一個或多個八位位組,將文件的長度表示為二進制值,最低有效八位位組在前。應使用能夠表示該整數的最小八位字節數。

M(x) 乘以 x 32(即左移 32 位)並使用 mod 2 除法除以 G(x),產生度數 <= 31 的餘數 R(x)。

R(x) 的係數被認為是一個 32 位序列。

對位序列進行補碼,結果為 CRC。

所以你去吧,CRCcksum是一個 32 位序列,所以它的值範圍從 0 到2 32 -1 = 4294967295(謝謝 Google!)

引用自:https://unix.stackexchange.com/questions/102806