我的目标只是生成一个临时令牌,用于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 code和source code),则没有强模式的/dev/urandom
似乎会退回到某些不安全的实现。因此OAuthProvider::generateToken()
比可用性(无不安全模式)更具优势,在使用php_mt_rand
系统调用的系统上,它应该是首选方法(source code of random_bytes
)。
另一种总结方法是查看一些广泛使用的库:对于symfony应用程序,fosoauthserver bundle也detailled explanation here。
最后但并非最不重要的一点是,我相信一些php核心函数也将得到比扩展更严格、更好的支持。