cksum が返す可能な値の範囲

cksum が返す可能な値の範囲

返される可能性のある値の範囲を探していますcksum。例えば

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

返品2379496500。返される可能性のある値(最小値と最大値)の範囲は何ですか?

ただし、上記のパラメータは、指定されたファイルの内容ではなく、完全修飾ファイルパスの文字列値です。

答え1

これPOSIX規格使用されるCRCアルゴリズムを指定しますcksum。ここに関連部分を引用します(強調):

CRCチェックサムのエンコーディングは、ジェネレータ多項式によって定義されます。

G(x)=x32 + x26 + x23 +x22 + x16 + x12 + x11 + x10 + x8 + x7 +x5 + x4 + x2 + x+1

数学的に特定のファイルに対応するCRC値は、次のプロセスで定義する必要があります。

評価するnビットは、n-1次mod 2多項式M(x)の係数と見なされます。 nビットはファイルのビットであり、最上位ビットはファイルの最初のオクテットの最上位ビットであり、最後のビットは最後のオクテットの最下位ビットであり、実装に0ビット(必要な場合)で埋められます。整数オクテット数の後に、ファイル長をバイナリ値として表す1つ以上のオクテットが続き、最下位オクテットから始まります。整数を表現できる最小数のオクテットを使用する必要があります。

M(x)にx 32を掛け(つまり、左に32ビット移動)、mod 2除算を使用してG(x)で除算して、<= 31次の残りのR(x)を生成します。

R(x)の係数は32ビットシーケンスとして扱われます。

ビットシーケンスが補完され、その結果がCRCです。

したがって、CRCはcksum32ビットシーケンスなので、対応する値の範囲です。0から2 32 -1 =4294967295(Googleありがとう!)

関連情報