我需要在 PHP 中生成一次性令牌。我可以使用两个函数来完成同样的事情:随机字节 http://php.net/random-bytes and openssl_random_pseudo_bytes http://php.net/openssl_random_pseudo_bytes。例如,使用random_bytes
:
var_dump(bin2hex(random_bytes(12)));
--> string(24) "338f489ec37a2c2b4943905d"
并使用openssl_random_pseudo_bytes
:
var_dump(bin2hex(openssl_random_pseudo_bytes(12)));
--> string(24) "1c7febea20029bd524fba8e7"
openssl_random_pseudo_bytes
PHP 5.3 及更高版本(所以我认为它已经存在了更长时间),并且random_bytes
是 PHP 7。我正在使用 PHP 7,所以我可以使用其中任何一个。
那么两者之间有什么主要(或次要)区别吗?如果没有,我很想和random_bytes
只是因为它有一个更简单的名称(=更容易阅读的代码)。
openssl_random_pseudo_bytes
是 OpenSSL 扩展的一部分,必须明确说明配置并包含 http://php.net/manual/en/openssl.setup.php在PHP编译过程中,需要外部依赖。
random_bytes
是 PHP 7 中的新增内容,作为生成随机字节的本机始终可用的 PHP 方法,该方法根据其所在的平台选择其内部随机源。
引入的主要原因random_bytes
问题是,在 PHP 中生成伪随机数据总是有点令人头疼,这要求开发人员具有平台意识,并且可能根据可用的扩展或系统级函数使用几种不同的后备方法。这通常会导致个别实现中出现错误,这在安全相关代码中尤其令人担忧。random_bytes
通过提供一个始终可用的函数并使用可用的最佳随机源来简化这一过程。如果您可以专门针对 PHP 7+,那么它应该是您的首选方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)