我的目标只是生成一个临时 token ,它将在 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
与 openssl_random_pseudo_bytes
相比,random_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
(如果您使用 PHP < 7,则存在一个享有盛誉的 polyfill,random_compat)。
/dev/urandom
和 /dev/random
之间的差异对于您的情况可以忽略不计(可以找到更详细的解释 there)。
random_bytes
使用 getrandom
系统调用或 /dev/urandom
, ( source code ), 而 OAuthProvider::generateToken()
如果生成的字符串太短( source code 和 source code of php_mt_rand
),没有强模式似乎会回退到一些不安全的实现。所以 random_bytes
在可用性(无不安全模式)和使用 getrandom
系统调用的系统上具有优势,因为它应该是首选方法(detailled explanation here)。
另一种得出结论的方法是查看一些广泛使用的库:FOSOAuthServer bundle,用于 Symfony 应用程序,uses random_bytes
也是。
最后但并非最不重要的一点是,我相信一些 PHP 核心功能也会比扩展得到更多的审查和更好的支持。
关于PHP 7 OAuthProvider VS random_bytes token 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49630194/