PHPでランダムIDを生成するランダムな文字列を生成する

PHPでランダムIDを生成するランダムな文字列を生成する

このコードは、PHPを使用して安全かつ高強度なランダムID(トークン)を生成するための関数です。セキュリティ性の高い乱数生成を実現し、ログイン認証、APIキー、CSRFトークンなどの用途に適したランダムな文字列を作成します。

セキュアな64文字ランダムトークン生成PHPコード

function ope_crypto_rand_secure($min, $max)
{
    $range = $max - $min;
    if ($range < 0) {
        return $min;
    }
    // not so random...
    $log = log($range, 2);
    $bytes = (int) ($log / 8) + 1; // length in bytes
    $bits = (int) $log + 1; // length in bits
    $filter = (int) (1 << $bits) - 1; // set all lower bits to 1
    do {
        $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
        $rnd = $rnd&$filter; // discard irrelevant bits
    } while ($rnd >= $range);
    return $min + $rnd;
}

function ope_getToken($length)
{
    $token = "";
    $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $codeAlphabet .= "abcdefghijklmnopqrstuvwxyz";
    $codeAlphabet .= "0123456789";
    $codeAlphabet .= "[]_-()|,~.^?/$&`{};+@#";
    for ($i = 0; $i < $length; $i++) {
        $token .= $codeAlphabet[ope_crypto_rand_secure(0, strlen($codeAlphabet))];
    }
    return $token;
}

$ope_token = ope_getToken(64); // 64文字のランダム文字列を生成する

コード解説・PHPでランダムIDを生成するランダムな文字列を生成する

🛡️ ope_crypto_rand_secure($min, $max)

  • 暗号的に安全な乱数バイトを使用し、$min から $max の範囲内の整数を返す
  • openssl_random_pseudo_bytes() + ビットフィルタリングで偏りを除去

🧪 ope_getToken($length)

  • 英大文字、小文字、数字、記号を含むランダム文字列を生成
  • 例えば ope_getToken(64) は 64文字のユニークなIDを出力

まとめ

このPHPコードは、セキュリティ要件が高いWebシステムにおいて必要とされる「ランダム性」と「予測不可能性」を兼ね備えたトークンを生成するために設計されています。openssl_random_pseudo_bytes() を使用することで、従来の rand()mt_rand() よりも安全性が高くなっています。