コマンドcksum
を実行すると、出力として次のようになります
2836376023 36 myfile.txt
36はファイルのサイズの後にファイル名が続くことを理解しています
しかし、数値283637602がどのように生成されるかについての式を知りたいです。あるファイルと別のファイルでは数値が完全に異なることを知っています。
2836376023
は、ファイルのCRCチェックサムです。
要するに、ファイルの内容に対して数学演算( 多項式除算 )が実行され、残りがチェックサムの生成に使用されます。計算が最後に実行されてからファイルが変更された場合、チェックサムは異なるため、転送中にファイルが破損していないことを確認するために使用できます。このメソッドは、偶発的なデータ破損をチェックする場合にのみ役立ちます。 CRCチェックサムが同じになるようにファイルを変更することは非常に簡単なので、意図的な攻撃に対して安全ではありません。
これを拡張するために、チェックサムを実行するプログラム(cksum
など)は、生成多項式を多項式除算の分母として定義します。チェックするファイルの内容は分子です。
計算の詳細な例は、Wikipediaにあります。
巡回冗長検査の計算
cksum
の場合の実装の正確な詳細を知りたい場合は、ソースコードを読むことができます サバンナでオンライン
または ソースのダウンロードを有効にする でダウンロードして(自宅で)
Sudo apt update
mkdir coreutils-src && cd coreutils-src
apt source coreutils
次に、cd
を新しいディレクトリに入れます。 cksum.c
はsrc
サブディレクトリにあります。