在 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