PHP 在使用随机变量和时间戳时始终给出相同的哈希字符串


php always giving the same hashed string when using random variables and timestamp

我正在使用以下内容来获取可用于重置密码的随机代码,但我总是得到相同的值 $encrypt兰特和timestamp应该每次都不同吗?

$randnumb = rand(1000000000000,999999999999);
$timestamp = time();
$encrypt = md5($row['userid']+$timestamp+$randnumb);

使用.连接运算符而不是+运算符

rand是一个伪随机数生成器,它只是一个来自某个初始值的函数,称为seed。为了得到不同的序列,你必须用 http://php.net/manual/en/function.srand.php:srand(time())设置不同的种子是最简单的方法。

但!切勿将randmd5用于任何加密任务,例如哈希!这是完全不安全的。

从 PHP 5.5 开始,您必须使用 http://php.net/manual/en/function.password-hash.php 对于旧版本,请使用 https://github.com/ircmaxell/password_compat 。

你需要看看 rand() 的语法

其兰特($min,$max)

所以第一个参数是最小值,第二个参数是最大值。

您需要再添加一个 9 才能生成随机数。

$randnumb = rand(1000000000000,9999999999999

);

你给rand的范围不好:第二个参数是第一个减 1。它将始终返回相同的数字。因此,在第二个参数中添加"9"位数字。

如果您的 userid 不是数字,则添加将不受该用户 ID 的影响,而只会受到其他两个元素的影响。也许你打算做一个串联,在这种情况下,你应该使用点(.)运算符。但是,如果用户 id 是数字,它应该可以工作。

您正在使用+运算符进行连接。使用.运算符进行 PHP 连接。

'+'用于JavaScript。