ホームページ >バックエンド開発 >PHPチュートリアル >検証用に PHP で安全で一意の英数字文字列を生成するにはどうすればよいですか?

検証用に PHP で安全で一意の英数字文字列を生成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-29 13:37:11631ブラウズ

How to Generate Secure and Unique Alphanumeric Strings in PHP for Verification?

検証用の一意の英数字文字列の生成

Web アプリケーションでは、検証リンクをユーザーに送信するのが一般的です。これらのリンクには通常、ユーザーを識別し、アカウントを確認するための一意の文字列が含まれています。このような文字列を生成するには、ランダムで安全なアプローチが必要です。

PHP には、ランダムな文字列を生成するためのメソッドがいくつか用意されています。安全なオプションの 1 つは、PHP 7 以降で利用可能なrandom_bytes() 関数を使用することです。この関数は、暗号的に安全な擬似ランダム バイトを生成します。例:

$bytes = random_bytes(20);
$string = bin2hex($bytes);

これにより、40 文字の英数字文字列が生成されます。

古いバージョンの PHP では、代わりに openssl_random_pseudo_bytes() 関数を使用できます。また、暗号的に安全な擬似ランダム バイトも生成します。

$bytes = openssl_random_pseudo_bytes(20);
$string = bin2hex($bytes);

もう 1 つのアプローチは、uniqid() 関数を使用することです。これは主に一意の識別子の生成に使用されますが、ランダムな文字列の作成にも利用できます:

$string = uniqid('', true);

ただし、uniqid() は暗号的に安全ではないため、機密情報には使用しないでください。

高レベルのセキュリティを必要とするアプリケーションの場合、カスタム関数を実装して、強力な暗号を生成できます。 strings:

function crypto_rand_secure($min, $max) {
    $range = $max - $min;
    if ($range < 1) return $min;
    $log = ceil(log($range, 2));
    $bytes = (int) ($log / 8) + 1;
    $bits = (int) $log + 1;
    $filter = (int) (1 << $bits) - 1;
    do {
        $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
        $rnd = $rnd & $filter;
    } while ($rnd > $range);
    return $min + $rnd;
}

function getToken($length) {
    $token = "";
    $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    $max = strlen($codeAlphabet) - 1;

    for ($i=0; $i < $length; $i++) {
        $token .= $codeAlphabet[crypto_rand_secure(0, $max)];
    }

    return $token;
}

crypto_rand_secure() 関数は、指定された範囲内の乱数を生成します。 getToken() 関数は、英数字のアルファベットを使用して、指定された長さのトークンを作成します。

これらの手法を利用すると、PHP でのさまざまな検証目的で、安全で一意の英数字文字列を効果的に生成できます。

以上が検証用に PHP で安全で一意の英数字文字列を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。