我的目标只是生成一个临时令牌,用于url中的用户标识,我应该使用OAuthProvider::generateToken还是random_bytes
从这些答案中:
Generate a single use token in PHP: random_bytes or openssl_random_pseudo_bytes?

best practice to generate random token for forgot password
random_bytes相比,openssl_random_pseudo_bytes似乎是php 7最近更新的选项。与OAuthProvider::generateToken相比是否相同?
实例:

$rb_token = bin2hex(random_bytes($length));
$oa_token = bin2hex((new OAuthProvider())->generateToken($length, TRUE));
// TRUE = strong "/dev/random will be used for entropy"

最佳答案

我会选择random_bytes(如果使用phprandom_compat)。
对于你的情况,/dev/urandom/dev/random之间的差异是可以忽略的(更详细的解释可以找到:AA>)。
random_bytes使用syscall或getrandom,(there),而如果生成的字符串太短(source codesource code),则没有强模式的/dev/urandom似乎会退回到某些不安全的实现。因此OAuthProvider::generateToken()比可用性(无不安全模式)更具优势,在使用php_mt_rand系统调用的系统上,它应该是首选方法(source code of random_bytes)。
另一种总结方法是查看一些广泛使用的库:对于symfony应用程序,fosoauthserver bundle也detailled explanation here
最后但并非最不重要的一点是,我相信一些php核心函数也将得到比扩展更严格、更好的支持。

07-24 16:47