Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

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

crc32関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

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

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

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

構文(syntax)

1<?php
2
3$string = "Hello, PHP!";
4$checksum = crc32($string);
5echo "CRC32 checksum for '{$string}': " . sprintf("%u", $checksum);
6
7?>

引数(parameters)

string $string

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

戻り値(return)

int

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

サンプルコード

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

1<?php
2
3/**
4 * 指定された文字列のCRC32チェックサムを計算し、その結果を表示します。
5 * CRC32値は通常、符号なし32ビット整数ですが、
6 * 'crc32b'というキーワードは、しばしばその値を16進数形式で表現する際に使われます。
7 *
8 * @param string $data チェックサムを計算する入力文字列。
9 * @return void
10 */
11function calculateCrc32Checksum(string $data): void
12{
13    // crc32() 関数は、入力文字列の循環冗長検査(CRC32)チェックサムを計算します。
14    // 戻り値は、符号なし32ビット整数として解釈されるべき整数値です。
15    $crc32Value = crc32($data);
16
17    echo "入力文字列: \"{$data}\"\n";
18    echo "CRC32 (整数値): {$crc32Value}\n";
19
20    // CRC32値は、システム間で互換性を持たせるため、または表示の目的で、
21    // 16進数形式で表現されることがよくあります。
22    // sprintf('%08x', ...) を使用すると、8桁でゼロパディングされた小文字の16進数文字列が得られ、
23    // これが 'crc32b' が指す一般的な表現の一つです。
24    $crc32Hex = sprintf('%08x', $crc32Value);
25    echo "CRC32 (16進数形式 - 'crc32b'の一般的な表現): {$crc32Hex}\n";
26    echo "--------------------------------------------------\n";
27}
28
29// サンプルデータを使って関数を実行し、CRC32値を計算・表示します。
30calculateCrc32Checksum("Hello, PHP!");
31calculateCrc32Checksum("This is a test string for CRC32.");
32calculateCrc32Checksum(""); // 空文字列の例
33calculateCrc32Checksum("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チェックサムを計算する

1<?php
2
3/**
4 * crc32関数の使用例。
5 *
6 * crc32は、入力文字列から32ビットの循環冗長検査(CRC)チェックサムを計算します。
7 * これは一方向のハッシュ関数であり、データの整合性検証によく使用されます。
8 * 提供されたチェックサムから元のデータを「デコード」(復元)することはできません。
9 */
10
11// チェックサムを計算する対象の文字列を定義します。
12$originalString = "この文字列のCRC32チェックサムを計算します。";
13
14// crc32関数を呼び出してチェックサムを計算します。
15// 戻り値は整数(int)型です。
16$checksum = crc32($originalString);
17
18// 計算されたチェックサムと元の文字列を表示します。
19echo "元の文字列: " . $originalString . "\n";
20echo "CRC32チェックサム (10進数): " . $checksum . "\n";
21
22// CRC32チェックサムは、16進数形式で表示されることもよくあります。
23echo "CRC32チェックサム (16進数): " . sprintf('%x', $checksum) . "\n";
24
25// 重要事項:
26// crc32はハッシュ関数であるため、計算されたチェックサムから元の文字列を「デコード」
27// つまり、逆算して復元することは不可能です。これは暗号化とは異なり、
28// 主にデータの破損や改ざんを検出するためのものです。
29echo "\n注意: CRC32は一方向のハッシュ関数です。\n";
30echo "計算されたチェックサム (" . $checksum . ") から元の文字列をデコード(復元)することはできません。\n";
31echo "これはデータの整合性を確認するために使用され、暗号化/復号化を目的としたものではありません。\n";
32
33?>

PHP 8で利用できるcrc32関数は、指定された文字列から32ビットの循環冗長検査(CRC)チェックサムを計算する機能を提供します。これは一方向のハッシュ関数の一種であり、主にデータの整合性を検証する目的で使用されます。

この関数は、string $stringという形式で入力となる文字列を引数として受け取ります。そして、計算されたチェックサムをint型の整数として返します。サンプルコードでは、「この文字列のCRC32チェックサムを計算します。」という文字列に対しcrc32関数を適用し、その結果を$checksum変数に格納しています。計算されたチェックサムは、10進数および16進数の両方で表示されており、一般的に16進数形式で扱われることが多いです。

特に重要な点として、crc32関数はハッシュ関数であるため、一度計算されたチェックサムから元の文字列を「デコード」する、つまり復元することは不可能です。これは暗号化や復号化を目的としたものではなく、データが転送中や保存中に破損したり、意図せず改ざんされたりしていないかを確認するために利用されます。したがって、この関数は与えられたデータの一貫性を簡潔に確認したい場合に有効です。

PHPのcrc32関数は、入力文字列から32ビットのチェックサムを計算し、データの整合性検証に利用されます。最も重要な注意点は、この関数が一方向のハッシュ関数であるため、計算されたチェックサムから元の文字列を「デコード」(復元)することは絶対にできない点です。サンプルコードにある「decode」というキーワードに惑わされないようにしてください。

これは暗号化や復号化を目的としたものではなく、主にデータの破損や改ざんを検出するためのものです。セキュリティを要する場面で情報を保護する目的で利用するには不十分であり、SHA-256のようなより強力なハッシュ関数を検討する必要があります。関数は整数(int)を返しますが、16進数形式で表示・利用されることも多いことを覚えておくと良いでしょう。

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

1<?php
2
3// crc32関数は、与えられた文字列のCRC32チェックサム(ハッシュ値)を計算します。
4// これは、データの整合性を簡単に確認するためによく使用されます。
5// 引数: string $string - チェックサムを計算する文字列
6// 戻り値: int - 計算されたCRC32チェックサム(符号なし32ビット整数)
7
8$inputString = "Welcome to PHP crc32 function example!";
9
10// crc32関数を呼び出して、文字列のチェックサムを計算します。
11$checksum = crc32($inputString);
12
13// 計算されたCRC32チェックサムと元の文字列を表示します。
14echo "元の文字列: " . $inputString . "\n";
15echo "CRC32チェックサム (10進数): " . $checksum . "\n";
16
17// CRC32チェックサムは16進数で表現されることが多いため、参考として表示します。
18// sprintf('%08x', ...) は、8桁のゼロ埋めされた16進数としてフォーマットします。
19echo "CRC32チェックサム (16進数): " . sprintf('%08x', $checksum) . "\n";
20
21?>

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))で扱うことが一般的で推奨されます。この関数はデータの破損検知には役立ちますが、意図的なデータ改ざんの検知には不向きである点にご注意ください。

PHP crc32 オンラインでチェックサムを計算する

1<?php
2
3/**
4 * PHP crc32関数のシンプルなオンラインサンプルコード
5 *
6 * このスクリプトは、GETリクエストパラメータ 'text' で受け取った文字列、
7 * またはデフォルトの文字列のCRC32チェックサムを計算し、表示します。
8 * システムエンジニアを目指す初心者が、PHPのcrc32関数の基本的な使い方と、
9 * 簡単なウェブページでの出力方法を理解するのに役立ちます。
10 */
11
12// 入力文字列を取得します。GETリクエストに 'text' パラメータがあればそれを使用し、
13// なければデフォルトの文字列を使用します。
14// htmlspecialchars() で文字列をエスケープし、XSS攻撃を防ぎます。
15$inputString = htmlspecialchars($_GET['text'] ?? 'Hello, PHP crc32 online example!');
16
17// crc32関数を使用して、入力文字列のCRC32チェックサムを計算します。
18// 戻り値は整数 (int) です。
19$crcValue = crc32($inputString);
20
21// 計算結果をウェブページとして出力します。
22// 必要最低限のHTML構造で表示します。
23?>
24<!DOCTYPE html>
25<html lang="ja">
26<head>
27    <meta charset="UTF-8">
28    <meta name="viewport" content="width=device-width, initial-scale=1.0">
29    <title>CRC32 計算結果 - PHPオンライン</title>
30    <style>
31        body { font-family: sans-serif; margin: 20px; line-height: 1.6; background-color: #f4f4f4; color: #333; }
32        .container {
33            background-color: #fff;
34            padding: 30px;
35            border-radius: 8px;
36            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
37            max-width: 600px;
38            margin: 30px auto;
39        }
40        h1 { color: #0056b3; }
41        p { margin-bottom: 10px; }
42        pre {
43            background-color: #eee;
44            padding: 12px;
45            border-radius: 5px;
46            overflow-x: auto;
47            word-wrap: break-word;
48        }
49        .note {
50            font-size: 0.9em;
51            color: #666;
52            border-top: 1px solid #eee;
53            margin-top: 20px;
54            padding-top: 15px;
55        }
56        a { color: #007bff; text-decoration: none; }
57        a:hover { text-decoration: underline; }
58    </style>
59</head>
60<body>
61    <div class="container">
62        <h1>CRC32 チェックサム計算</h1>
63
64        <p><strong>入力文字列:</strong></p>
65        <pre><?= $inputString ?></pre>
66
67        <p><strong>CRC32 チェックサム (10進数):</strong></p>
68        <pre><?= $crcValue ?></pre>
69
70        <p><strong>CRC32 チェックサム (16進数):</strong></p>
71        <pre><?= dechex($crcValue) ?></pre> <!-- dechex() で16進数表現に変換 -->
72
73        <div class="note">
74            <p>このページをブラウザで開いた後、URLに <code>?text=任意の文字列</code> を追加して試してみてください。</p>
75            <p>例: <a href="?text=PHPは素晴らしい言語です">このリンクをクリックして試す</a></p>
76            <p>CRC32は、データの破損を検出するために使われるハッシュ関数の一つです。</p>
77        </div>
78    </div>
79</body>
80</html>

PHPのcrc32関数は、与えられた文字列の「巡回冗長検査(CRC)32ビットチェックサム」を計算するために使用されます。これは、データが転送中や保存中に破損していないかを確認する目的で利用されるハッシュ関数の一つです。この関数は、引数として単一の文字列を受け取り、その文字列に対応する32ビットの整数値を返します。

提示されたサンプルコードは、crc32関数の基本的な使い方をウェブブラウザ上で確認できるようになっています。まず、URLのGETパラメータ「text」から入力文字列を受け取ります。もしパラメータが指定されていなければ、デフォルトの文字列が使用されます。ここでは、セキュリティ対策としてhtmlspecialchars()関数を用いて入力文字列をエスケープしています。

次に、この取得した文字列をcrc32()関数に渡してチェックサムを計算します。関数は計算結果を整数値として返します。そして、計算されたCRC32チェックサムを、元の入力文字列とともにウェブページ上に表示します。チェックサムは、人間が読みやすいように10進数とdechex()関数を使って16進数の両方で出力されます。URLに「?text=任意の文字列」を追加することで、様々な文字列でcrc32関数の動作を簡単に試すことができます。

入力された文字列をウェブページに表示する際は、htmlspecialchars() を必ず使用してください。これにより、悪意のあるスクリプトの実行を防ぎ、セキュリティを強化できます。crc32関数の戻り値は整数ですが、システム環境によっては符号付き整数として扱われ、負の値になる場合があります。そのため、常に正の値を期待するなら sprintf('%u', crc32($string)) のように符号なし整数として扱うことを検討すると良いでしょう。CRC32はデータの破損検出に適していますが、パスワードのハッシュ化など、セキュリティが求められる場面ではSHA-256のようなより安全なハッシュ関数を利用すべきです。

関連コンテンツ

関連プログラミング言語