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

作成日: 更新日:

sha1関数は、指定された文字列のSHA-1(Secure Hash Algorithm 1)ハッシュ値を計算する関数です。この関数は、入力されたデータに対して、常に同じ固定長の短い文字列(ハッシュ値)を生成する一方向の暗号学的ハッシュ関数の一種として知られています。同じ入力からは常に同じハッシュ値が生成されますが、生成されたハッシュ値から元のデータを復元することは非常に困難であるという特性を持っています。

引数としては、ハッシュ化したい文字列を一つ受け取ります。さらに、オプションとして$binaryという真偽値(boolean)の引数を指定できます。この$binarytrueに設定された場合、結果は生(raw)のバイナリ形式の20バイト文字列として返されます。デフォルトであるfalseの場合は、40文字の16進数文字列としてハッシュ値が返されます。

この関数は、主にデータの整合性チェックや、ファイルの内容が改ざんされていないかを確認する目的などで利用されます。例えば、ダウンロードしたファイルのハッシュ値を計算し、提供元が公開しているハッシュ値と比較することで、ファイルが破損していないか、あるいは不正に改変されていないかを検証することができます。ただし、セキュリティ要件の高いパスワードのハッシュ化などには、より現代的で強力なハッシュアルゴリズム(例えば、PHP 8で推奨されるpassword_hash関数)の使用が推奨されます。

基本的な使い方

構文(syntax)

<?php
echo sha1("入力文字列");
?>

引数(parameters)

string $string, bool $binary = false

  • string $string: ハッシュ化したい文字列
  • bool $binary = false: trueを指定すると、バイナリ形式(raw binary format)でハッシュ値が返されます。デフォルトはfalseで、16進数文字列で返されます。

戻り値(return)

string

入力された文字列をSHA1ハッシュアルゴリズムで計算した結果を文字列として返します。

サンプルコード

PHP sha1()でハッシュを計算する

<?php

/**
 * PHPのsha1()関数を使用して、文字列のSHA-1ハッシュを計算するデモンストレーション。
 *
 * この関数は、入力文字列のSHA-1ハッシュ値を異なる出力形式で示します。
 * - デフォルトの16進数形式(40文字)
 * - 生のバイナリ形式(20バイト)
 */
function demonstrateSha1Hashing(): void
{
    // ハッシュ化する入力文字列
    $inputString = "Hello, PHP!";

    echo "入力文字列: \"" . $inputString . "\"\n\n";

    // 1. SHA-1ハッシュを16進数形式で計算 (デフォルト)
    // 第二引数 $binary が false の場合 (デフォルト)、40文字の16進数文字列を返します。
    $sha1Hex = sha1($inputString);
    echo "SHA-1ハッシュ (16進数形式): " . $sha1Hex . "\n";
    echo "長さ (16進数形式): " . strlen($sha1Hex) . " 文字\n\n";

    // 2. SHA-1ハッシュを生のバイナリ形式で計算
    // 第二引数 $binary を true にすると、20バイトの生バイナリ文字列を返します。
    // そのまま出力すると読みにくい場合があるため、bin2hex() で16進数に変換して表示します。
    $sha1Binary = sha1($inputString, true);
    echo "SHA-1ハッシュ (生バイナリ形式): " . bin2hex($sha1Binary) . " (表示用に16進数に変換)\n";
    echo "長さ (生バイナリ形式): " . strlen($sha1Binary) . " バイト\n";
}

// デモンストレーション関数を実行
demonstrateSha1Hashing();

?>

PHPのsha1()関数は、入力された文字列のSHA-1ハッシュ値を計算するために利用される関数です。SHA-1ハッシュは、データの改ざんがないかを確認したり、パスワードなどの情報を安全に保存する際などに用いられる、一方向性の暗号学的ハッシュ関数の一種です。

この関数は、最初の引数$stringにハッシュ化したい元の文字列を指定します。2番目の引数$binaryはオプションで、ハッシュ値の出力形式を制御します。この引数をfalse(デフォルト)にすると、関数は40文字の16進数形式の文字列を戻り値として返します。一方、trueに設定すると、20バイトの生バイナリ形式の文字列が戻り値となります。戻り値の型は常に文字列です。

サンプルコードでは、「Hello, PHP!」という文字列を例に、sha1()関数の使い方と出力形式の違いをデモンストレーションしています。まず、$binary引数を省略した場合(またはfalseを指定した場合)は、一般的な40文字の16進数形式でハッシュ値が出力されることを確認できます。次に、$binary引数をtrueに指定した場合の出力も示しています。生バイナリ形式のハッシュ値は、そのままでは読みにくいことが多いため、bin2hex()関数を使用して表示用に16進数形式に変換しています。これにより、同じ入力文字列でも引数の設定によって異なる形式のハッシュ値が得られることが理解できます。

PHPのsha1()関数は、文字列のSHA-1ハッシュを計算します。この関数の利用において、第二引数$binaryの値によって戻り値の形式と長さが異なる点に注意してください。デフォルトでは40文字の16進数文字列が返され、trueを指定すると20バイトの生バイナリ文字列が得られます。生バイナリ形式は表示に適さないため、サンプルコードのようにbin2hex()関数などで16進数に変換して利用すると良いでしょう。ただし、セキュリティ上の注意点として、SHA-1は現在セキュリティ上の脆弱性が指摘されており、パスワードのハッシュ化など、セキュリティが求められる用途には推奨されません。データの整合性チェックやレガシーシステムとの互換性維持といった限定的な用途での利用が適切であり、セキュリティが重要な場面ではArgon2やbcryptなどのより強力なハッシュアルゴリズムの使用を強く推奨します。

PHP sha1関数で文字列ハッシュを生成する

<?php

/**
 * PHPのsha1関数を使用して、文字列のSHA-1ハッシュを計算し、表示するサンプルコードです。
 * システムエンジニアを目指す初心者向けに、基本的な使用方法と戻り値の形式を示します。
 *
 * sha1関数は、入力された文字列をSHA-1アルゴリズムでハッシュ化します。
 * 主にデータの整合性チェックなどに使用されますが、セキュリティ用途(パスワード保存など)には
 * より強力なハッシュ関数(例: password_hash)の使用が推奨されます。
 */

// ハッシュを計算したい任意の入力文字列を定義します。
$originalString = "この文字列をハッシュ化します";

// sha1関数を呼び出し、入力文字列のSHA-1ハッシュを計算します。
//
// 引数:
//   $string (string): ハッシュ化したい文字列。
//   $binary (bool): オプション。デフォルトは false。
//                  true に設定すると、生のバイナリ形式のハッシュを返します。
//                  false (または省略) の場合、40文字の16進数形式の文字列を返します。
//
// 戻り値:
//   (string): 計算されたSHA-1ハッシュ文字列。
$sha1Hash = sha1($originalString);

// 計算されたSHA-1ハッシュを出力します。
echo "元の文字列: " . $originalString . "\n";
echo "SHA-1ハッシュ (16進数形式): " . $sha1Hash . "\n";

// SHA-1ハッシュは通常、40文字の16進数で表現されます。
echo "生成されたハッシュの文字数: " . strlen($sha1Hash) . "\n";

// 別の入力文字列で再度試してみます。
$anotherString = "PHPプログラミングは楽しい!";
$anotherSha1Hash = sha1($anotherString);

echo "\n別の文字列: " . $anotherString . "\n";
echo "そのSHA-1ハッシュ: " . $anotherSha1Hash . "\n";

?>

sha1関数は、入力された文字列をSHA-1(Secure Hash Algorithm 1)アルゴリズムに基づいてハッシュ化し、その結果を返すPHPの関数です。この関数は主にデータの整合性チェックなどに使用されます。ただし、パスワードの保存などセキュリティが重要な用途には、より強力なハッシュ関数(例: password_hash)の使用が推奨されます。

この関数は二つの引数を取ります。一つ目の引数$stringには、ハッシュ化したい元の文字列を指定します。二つ目の引数$binaryはオプションの真偽値で、デフォルトはfalseです。trueに設定すると、ハッシュ値は生のバイナリ形式で返されますが、false(または省略)の場合は、40文字の16進数形式の文字列として返されます。戻り値は、計算されたSHA-1ハッシュ値を含む文字列です。

サンプルコードでは、「この文字列をハッシュ化します」という元の文字列をsha1関数で処理し、生成された40文字の16進数形式のSHA-1ハッシュ値を画面に表示しています。また、別の入力文字列「PHPプログラミングは楽しい!」についても同様にハッシュを計算し、その結果も確認できます。これにより、sha1関数の基本的な使用方法と、元の文字列から一意のハッシュ値が生成される挙動を理解できます。

sha1関数は、文字列のSHA-1ハッシュを計算しますが、パスワードの保存などセキュリティが重要な用途での使用は推奨されません。SHA-1アルゴリズムには脆弱性が指摘されており、より安全なpassword_hash関数などの利用をご検討ください。この関数は主に、ファイルの改ざん検出やデータの整合性チェックといった用途で利用されます。デフォルトでは40文字の16進数形式の文字列を返しますが、第2引数にtrueを指定すると生のバイナリ形式のハッシュが返されます。通常はデフォルトの16進数形式の方が扱いやすく、他のシステムとの連携もしやすいです。ハッシュから元の文字列を復元することはできません。

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