【PHP8.x】crc32関数の使い方

作成日: 更新日:

crc32関数は、与えられた文字列の32ビット循環冗長検査(CRC32)値を計算する関数です。このCRC32値は、データが破損していないか、あるいは改ざんされていないかを検出するために広く利用されるチェックサムの一種です。例えば、ファイルをダウンロードした後にそのファイルの整合性を確認したり、ネットワークを介して転送されたデータの正確性を検証したりする際に非常に役立ちます。

この関数は、引数として単一の文字列を受け取ります。CRC32値を計算したい対象の文字列をここに指定します。関数は、指定された文字列に基づいて計算された32ビットのCRC値を整数(integer)として返します。

PHPの整数型は通常符号付きであるため、計算結果が32ビットの符号なし整数の最大値である 0xFFFFFFFF を超える値の場合、結果が負の値として返されることがあります。これは、計算された数値自体が誤っているわけではなく、PHPの内部的な数値表現によるものです。もし、この結果を常に正の符号なし32ビット整数として扱いたい場合は、sprintf('%u', $crc32) のようにフォーマットすることで、期待される正の整数値として取得できます。この関数は、データの完全性や一貫性を簡易的に確認する場面で、シンプルかつ効果的な手段を提供します。

基本的な使い方

構文(syntax)

<?php

$string = "Hello, PHP!";
$checksum = crc32($string);
echo "CRC32 checksum for '{$string}': " . sprintf("%u", $checksum);

?>

引数(parameters)

string $string

  • string $string: チェックサムを計算する対象の文字列

戻り値(return)

int

crc32関数は、文字列のCRC-32チェックサムを符号なし整数として返します。

サンプルコード

PHP crc32チェックサムを計算する

<?php

/**
 * 指定された文字列のCRC32チェックサムを計算し、その結果を表示します。
 * CRC32値は通常、符号なし32ビット整数ですが、
 * 'crc32b'というキーワードは、しばしばその値を16進数形式で表現する際に使われます。
 *
 * @param string $data チェックサムを計算する入力文字列。
 * @return void
 */
function calculateCrc32Checksum(string $data): void
{
    // crc32() 関数は、入力文字列の循環冗長検査(CRC32)チェックサムを計算します。
    // 戻り値は、符号なし32ビット整数として解釈されるべき整数値です。
    $crc32Value = crc32($data);

    echo "入力文字列: \"{$data}\"\n";
    echo "CRC32 (整数値): {$crc32Value}\n";

    // CRC32値は、システム間で互換性を持たせるため、または表示の目的で、
    // 16進数形式で表現されることがよくあります。
    // sprintf('%08x', ...) を使用すると、8桁でゼロパディングされた小文字の16進数文字列が得られ、
    // これが 'crc32b' が指す一般的な表現の一つです。
    $crc32Hex = sprintf('%08x', $crc32Value);
    echo "CRC32 (16進数形式 - 'crc32b'の一般的な表現): {$crc32Hex}\n";
    echo "--------------------------------------------------\n";
}

// サンプルデータを使って関数を実行し、CRC32値を計算・表示します。
calculateCrc32Checksum("Hello, PHP!");
calculateCrc32Checksum("This is a test string for CRC32.");
calculateCrc32Checksum(""); // 空文字列の例
calculateCrc32Checksum("1234567890");

PHPのcrc32関数は、指定された文字列の循環冗長検査(CRC32)チェックサムを計算し、その結果を整数値で返します。この関数は、引数としてチェックサムを計算したい文字列(string $string)を受け取り、戻り値として計算されたCRC32値を表す整数(int)を返します。CRC32チェックサムは、データが転送中や保存中に破損していないかなど、データの同一性を確認する目的で広く利用される技術です。

サンプルコードでは、まずcrc32()関数を使って入力文字列から整数形式のCRC32値を計算しています。この整数値は通常、符号なし32ビット整数として扱われます。また、「crc32b」というキーワードは、しばしばこのCRC32値を8桁の16進数形式で表現する際に用いられる一般的な慣習を指します。コード内ではsprintf('%08x', ...)を利用して、計算された整数値をこの「crc32b」が示すようなゼロパディングされた小文字の16進数文字列に変換し、表示しています。このように、crc32関数は、文字列から一意なチェックサムを効率的に生成し、その値を異なる形式で利用するための基礎を提供します。

crc32関数は、指定された文字列のチェックサムを計算し、整数を返します。この戻り値は、PHPの整数型で扱われますが、本来は符号なし32ビット整数として解釈すべき点に注意が必要です。特に、PHPの環境や値によっては、結果が負の値として表示される場合があります。他のシステムとの互換性を保つためや、視認性を高めるためには、サンプルコードのようにsprintf('%08x', ...)を用いて8桁ゼロパディングの16進数形式に変換することが推奨されます。「crc32b」というキーワードは、多くの場合この16進数形式を指します。crc32はデータの破損検出には有効ですが、データの改ざん防止など、暗号学的なセキュリティ目的には使用できませんので、その点も誤解しないよう注意してください。

PHP crc32関数で文字列のチェックサムを計算する

<?php

// crc32関数は、与えられた文字列のCRC32チェックサム(ハッシュ値)を計算します。
// これは、データの整合性を簡単に確認するためによく使用されます。
// 引数: string $string - チェックサムを計算する文字列
// 戻り値: int - 計算されたCRC32チェックサム(符号なし32ビット整数)

$inputString = "Welcome to PHP crc32 function example!";

// crc32関数を呼び出して、文字列のチェックサムを計算します。
$checksum = crc32($inputString);

// 計算されたCRC32チェックサムと元の文字列を表示します。
echo "元の文字列: " . $inputString . "\n";
echo "CRC32チェックサム (10進数): " . $checksum . "\n";

// CRC32チェックサムは16進数で表現されることが多いため、参考として表示します。
// sprintf('%08x', ...) は、8桁のゼロ埋めされた16進数としてフォーマットします。
echo "CRC32チェックサム (16進数): " . sprintf('%08x', $checksum) . "\n";

?>

PHPのcrc32関数は、指定された文字列のCRC32チェックサム(ハッシュ値)を計算します。このチェックサムは、データが転送中や保存中に破損したり改ざんされていないかなど、データの整合性を簡単に確認する目的で広く利用されます。

この関数は、チェックサムを計算したいstring型の文字列を引数として受け取ります。戻り値としては、計算されたCRC32チェックサムがint型の整数として返されます。この整数は、符号なしの32ビット整数に相当します。

提供されたサンプルコードでは、まず"Welcome to PHP crc32 function example!"という文字列を変数$inputStringに格納しています。その後、crc32()関数にこの$inputStringを渡し、計算されたチェックサムを$checksum変数に代入しています。実行結果として、元の文字列と、計算されたCRC32チェックサムが10進数および16進数で表示されます。特に、sprintf('%08x', $checksum)は、チェックサムを8桁のゼロ埋めされた16進数形式で表示するためのもので、一般的にCRC32チェックサムはこの形式で扱われることが多いです。このように、crc32関数を使うことで、簡単に文字列の固有の値を生成し、データの状態を確認できます。

crc32関数は、与えられた文字列の簡単なデータ整合性確認に利用されますが、暗号学的なセキュリティ目的のハッシュ関数ではありません。そのため、パスワード保護などセキュリティが求められる用途には絶対に使用しないでください。異なる入力が同じチェックサムになる衝突が容易に発生するためです。

戻り値は符号なし32ビット整数ですが、PHPの整数型は符号付きであるため、計算結果によっては負の値として表示されることがあります。そのため、正確な値の比較や表現には、サンプルコードのように16進数形式(例: sprintf('%08x', $checksum))で扱うことが一般的で推奨されます。この関数はデータの破損検知には役立ちますが、意図的なデータ改ざんの検知には不向きである点にご注意ください。

【PHP8.x】crc32関数の使い方 | いっしー@Webエンジニア