首頁 > 後端開發 > php教程 > 如何在 PHP 中產生安全且唯一的字母數字字串以進行驗證?

如何在 PHP 中產生安全且唯一的字母數字字串以進行驗證?

Barbara Streisand
發布: 2024-12-29 13:37:11
原創
639 人瀏覽過

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

產生用於驗證的唯一字母數字字串

在 Web 應用程式中,向使用者發送驗證連結是很常見的。這些連結通常包含一個唯一的字串來識別使用者並驗證他們的帳戶。產生這樣的字串需要一種隨機且安全的方法。

PHP 提供了多種產生隨機字串的方法。一個安全的選擇是使用 random_bytes() 函數,該函數在 PHP 7 及更高版本中可用。此函數產生加密安全的偽隨機位元組。例如:

$bytes = random_bytes(20);
$string = bin2hex($bytes);
登入後複製

這將產生一個 40 個字元的字母數字字串。

在舊版的 PHP 中,可以改用 openssl_random_pseudo_bytes() 函式。它還會產生加密安全的偽隨機位元組。

$bytes = openssl_random_pseudo_bytes(20);
$string = bin2hex($bytes);
登入後複製

另一個方法是使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板