在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中文網其他相關文章!