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()
よりも安全性が高くなっています。