在 PHP 中生成隨機字串

Muhammad Abubakar 2023年1月30日
  1. 在 PHP 中生成隨機字串
  2. 使用 uniqid() 函式生成隨機字串
  3. 在 PHP 中使用 str_shuffle($string) 函式生成隨機字串
  4. 在 PHP 中生成隨機的十六進位制字串
  5. 在 PHP 中生成加密安全的隨機字串
在 PHP 中生成隨機字串

在本教程文章中,我們將討論如何在 PHP 中生成隨機字串。

在 PHP 中生成隨機字串

我們將在 PHP 中定義隨機字串生成器函式:

<?php
function random_str_generator ($len_of_gen_str){
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    $var_size = strlen($chars);
    echo "Random string ="; 
    for( $x = 0; $x < $len_of_gen_str; $x++ ) {
        $random_str= $chars[ rand( 0, $var_size - 1 ) ];  
        echo $random_str;  
    }
echo "\n";
}
random_str_generator (8)
?>

輸出:

Random string =ExmIixDb

不必在宣告的變數中僅使用字母;你還可以在隨機生成的字串中新增數字,符號等。

在第四行中,我們使用 strlen() 函式獲取宣告的變數的長度。它有助於 rand( 0, $var_size - 1 ) 從指定的給定範圍生成索引,然後將該值新增到新建立的變數中,迴圈將幫助 rand( 0, $var_size - 1 ) 生成特定的長度。的字串。

使用 uniqid() 函式生成隨機字串

這是使用內建函式 uniqid() 生成隨機字串的另一種方法。它根據當前時間戳生成 13 個字元的長唯一識別符號。解決方法如下:

<?php 
$Random_str = uniqid();  
echo "Random String:", $Random_str, "\n";
?> 

輸出:

Random String:606208975a59f

uniqid() 函式還接受可能會增加字串或識別符號的唯一性的引數。它為你提供了更多描述的價值。以下是一些解決方案:

<?php 
echo uniqid('user_');
?> 

輸出:

user_60620a2b23235 

在 PHP 中使用 str_shuffle($string) 函式生成隨機字串

str_shuffle($string) 是內建函式,它用作隨機字串生成器函式,就像我們在上面看到的那樣,我們使用迴圈和 rand() 內建函式生成隨機字串,但是它也不同。我們僅使用內建函式來生成唯一字串,這可以通過指定 (str_shuffle($string),0,x(any number)) 的範圍來幫助我們形成你所需長度的唯一密碼。

<?php
 $x = 0;
 $y = 10;
$Strings = '0123456789abcdefghijklmnopqrstuvwxyz';
echo "Gen_rand_str: ",substr(str_shuffle($Strings), $x, $y), "\n";

$a = 0;
$b = 20;
$Strings='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
echo "Gen_My_Pass: ",'hello.'.substr(str_shuffle($Strings), $a, $b).'.World',"\n";
?>

輸出:

Gen_rand_str: b38aenwpkh
Gen_My_Pass: hello.EUMm4TB26CltW8qYnApF.World

它還可能有助於我們生成網址(例如 e.t.c)的隨機檔名。它比上述生成器更安全,並且預測複雜。

此方法更精確,但存在一些問題,例如它不能兩次在你的隨機字串中提供相同的字元,並且只要你提供輸入字串,隨機輸出就很長。

在 PHP 中生成隨機的十六進位制字串

md5($string, $raw_output)sha1($string,$raw_output) 函式可幫助我們生成隨機的十六進位制字串。在這些函式中,我們使用 time() 作為實現輸出的輸入,如果我們想要一個 32 個字元的十六進位制字串,則使用 md5(),對於 40 個字元,我們使用 sha1()。最後,我們還可以通過 substr()函式提取指定長度的隨機字串。

<?php
 
echo "Out1: ",substr(md5(time()), 0, 16),"\n";
 
echo "Out2: ",substr(sha1(time()), 0, 16),"\n";
 
echo "Out3: ",md5(time()),"\n";
 
echo "Out4: ",sha1(time()),"\n";
 
?>

輸出:

Out1: fcc78a076a5b743d
Out2: ae03e817c0dc6048
Out3: fcc78a076a5b743d8916038b48a6b0ee
Out4: ae03e817c0dc6048c19b708ce411a058294425b1

在 PHP 中生成加密安全的隨機字串

該生成器是 PHP 的最重要和最有用的功能。我們上面將討論的所有生成器都不是加密安全的。加密安全意味著它也可以生成隨機字串,但是第三方很難生成相同的隨機數。這就是為什麼我們可以說它是加密安全的。
random_bytes($length) 是可以生成加密安全的隨機字串的函式。使用者指定長度引數。請參見下面的示例。

<?php
 
echo "Output-1: ",bin2hex(random_bytes(10)),"\n";
 
echo "Output-2: ",bin2hex(random_bytes(20)),"\n";
 
echo "Output-3: ",bin2hex(random_bytes(24)),"\n";
 
?>

輸出:

Output-1: 911fc716798ce464c7c3
Output-2: 182fedf65a90b66139d80dbfc0f82912b73f37cd
Output-3: c3408d3a0dea41251dce940fe550452ca180cf5effaad235

如你在上面的程式碼中看到的,我們使用了 bin2hex() 函式。當 random_bytes($length) 提供特定輸出時,bin2hex() 將其轉換為十六進位制值。這可能會使函式 random_bytes($length) 的值翻倍。

openssl_random_pseudo_bytes($length, &$crypto_strong) 函式還用於隨機生成加密字串。crypto_strong 引數用於分析字串是否由密碼安全演算法生成。

如果我們希望使用從 a 到 z 的所有字串的加密安全隨機字串,請使用以下程式碼。

<?php
 
function secure_random_string($length) {
    $rand_string = '';
    for($i = 0; $i < $length; $i++) {
        $number = random_int(0, 36);
        $character = base_convert($number, 10, 36);
        $rand_string .= $character;
    }
 
    return $rand_string;
}
 
echo "Sec_Out_1: ",secure_random_string(10),"\n";
 
echo  "Sec_Out_2: ",secure_random_string(10),"\n";
 
echo  "Sec_Out_3: ",secure_random_string(10),"\n";
 
?>

輸出:

Sec_Out_1: znxtaqynoi
Sec_Out_2: 10k10zkddntm
Sec_Out_3: ook8gfck6u

我們在 secure_random_string() 函式中指定隨機字串的長度。在此函式中,我們使用一個迴圈,其中 random_int() 從給定的特定範圍生成隨機整數。之後,我們使用 base_convert() 函式將以 10 為底的整數轉換為 36。最終,我們得到的字元來自 0-9 的任何數字,也來自 a-z 的任何字元。這是生成隨機密碼字串的另一種方法。

相關文章 - PHP String