每当您需要非常随机的令牌时,这可能会有所帮助
<?php echo mb_strtoupper(strval(bin2hex(openssl_random_pseudo_bytes(16)))); ?>
在PHP中,使用 random_bytes() 。原因:您正在寻找获取密码提醒令牌的方法,如果是一次性登录凭据,那么您实际上有一个要保护的数据(即 - 整个用户帐户)
random_bytes()
所以,代码如下:
//$length = 78 etc $token = bin2hex(random_bytes($length));
的 更新 强> : 之前的版本 这个答案的意思是指 uniqid() 如果存在安全问题而不仅仅是唯一性,这是不正确的。 uniqid() 基本上只是 microtime() 用一些编码。有简单的方法来获得准确的预测 microtime() 在你的服务器上。攻击者可以发出密码重置请求,然后尝试使用几个可能的令牌。如果使用more_entropy,这也是可能的,因为额外的熵同样很弱。谢谢 @NikiC 和 @ScottArciszewski 指出这一点。
uniqid()
microtime()
有关详细信息,请参阅
您可以使用
echo str_shuffle('ASGDHFfdgfdre5475433fd');
这回答了“最佳随机”请求:
阿迪的回答 1 来自Security.StackExchange有一个解决方案:
确保你拥有OpenSSL支持,并且你永远不会出错这个单线程 $token = bin2hex(openssl_random_pseudo_bytes(16));
确保你拥有OpenSSL支持,并且你永远不会出错这个单线程
$token = bin2hex(openssl_random_pseudo_bytes(16));
<子> 1. Adi,2018年11月12日,Celeritas,“为确认电子邮件生成一个不可饶恕的令牌”,2013年9月20日7:06, https://security.stackexchange.com/a/40314/ 子>
您还可以使用DEV_RANDOM,其中128 = 1/2生成的令牌长度。下面的代码生成256个令牌。
$token = bin2hex(mcrypt_create_iv(128, MCRYPT_DEV_RANDOM));