CRC32・チェックサムの計算
入力した文字列から、データの誤りを見つけるためによく使われるCRC32の値と、バイトを単純に足しただけのチェックサムを計算します。
計算方法
CRC32 文字列をUTF-8のバイト列に直します。そこから、決まった多項式(0xEDB88320、IEEE 802.3で使われるもの)を使った割り算のあまりの考え方で、32ビットの値を計算します。データが少しでも変わると、まったく違う値になります。
単純なチェックサム このツールでは、すべてのバイトの値を足して65536で割ったあまりとしています。CRC32より簡単な分、誤りを見つける力は弱くなります。
どちらも、通信や保存の途中でデータが壊れていないかを確かめるための値です。送る前と受け取った後で値が同じなら、途中で壊れていない可能性が高いと判断します。
例:「abc」(3バイト)のCRC32は352441C2(16進数)です。「こんにちは」はUTF-8で15バイトになり、CRC32はB8841BE7、単純なチェックサムは2,582になります。
気をつけること。CRC32は、データの壊れを見つけるための値です。同じ値になるデータを意図的に作ることが簡単なため、パスワードの保存や改ざんの防止には使えません。同じ文字列(同じバイト列)なら、いつ計算しても同じ値になります。全角と半角、大文字と小文字が違えば、まったく違う値になります。文字コードがUTF-8でない場合は、同じ文字でも値が変わります。
出典:CRC-32(IEEE 802.3で使われる多項式 0xEDB88320)の定義
よくある質問
CRC32は暗号として安全?
いいえ。CRC32はデータの壊れを見つけるための値で、意図的に同じ値を作られることも簡単なため、パスワードの保存や改ざん防止には使えません。
同じ文字列なら、いつ計算しても同じ値になる?
はい。同じ文字列(同じバイト列)であれば、いつ計算しても同じCRC32・チェックサムになります。
全角と半角で値は変わる?
変わります。CRC32はバイト列そのものから計算するため、1文字でも違えば、まったく違う値になります。