在 PHP 中生成安全随机数
在 PHP 中生成安全随机数对于密码重置等应用程序至关重要,其中原始密码是经过哈希处理的并且不可用。虽然 mt_rand 不足,但操作系统或加密随机数模块可能无法访问。
建议的解决方案和问题
建议的方法包括存储初始种子并计算使用公式的后续随机数:
结果 = 种子
种子 = sha512(seed .mt_rand())
虽然 sha512 是安全的,但在这里使用它是错误的。 mt_rand 调用不会增强安全性,并且种子会被取消。这种误解表明了安全系统设计中的弱点。
推荐方法
强烈建议使用系统的熵源,而不是依赖哈希来生成熵:
以下是来自 php.net 的示例 PHP 代码,用于从这些来源获取安全的 128 位字符串:
$pr_bits = ''; // Unix/Linux platform $fp = @fopen('/dev/urandom','rb'); if ($fp !== FALSE) { $pr_bits .= @fread($fp,16); @fclose($fp); } // MS-Windows platform if (@class_exists('COM')) { try { $CAPI_Util = new COM('CAPICOM.Utilities.1'); $pr_bits .= $CAPI_Util->GetRandom(16,0); } catch (Exception $ex) { // Handle exception } } if (strlen($pr_bits) < 16) { // Handle entropy source issue }
使用此方法可确保安全的随机数生成,这对于保护 PHP 中的敏感数据至关重要应用程序。
以上是如何在 PHP 中为敏感应用程序生成安全随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!