Penjanaan Nombor Rawak Selamat dalam PHP: Gambaran Keseluruhan Komprehensif
Kriptografi selalunya memerlukan penjanaan nombor rawak yang tidak dapat diramalkan. Dalam PHP, fungsi "mt_rand" tidak memenuhi keperluan ini. Artikel ini menyelidiki kaedah selamat untuk menjana nombor rawak dalam PHP itu sendiri, menangani isu kata laluan yang terlupa.
Penyelesaian yang dicadangkan pada mulanya melibatkan menyimpan benih dan mengemas kininya dengan setiap panggilan, seperti berikut:
result = seed seed = sha512(seed . mt_rand())
Walau bagaimanapun, pendekatan ini mempunyai kelemahan yang ketara. Fungsi sha512 tidak meningkatkan entropi secara ajaib, dan panggilan "mt_rand" tidak mencukupi untuk menggagalkan musuh. Sebaliknya, adalah dinasihatkan untuk menggunakan sumber entropi yang disediakan oleh sistem pengendalian moden:
Berikut ialah coretan kod PHP untuk menjana rawak 128-bit yang selamat string:
$pr_bits = ''; if (file_exists("/dev/urandom")) { $fp = fopen('/dev/urandom','rb'); $pr_bits .= fread($fp, 16); fclose($fp); } elseif (class_exists('COM')) { try { $CAPI_Util = new COM('CAPICOM.Utilities.1'); $pr_bits .= $CAPI_Util->GetRandom(16, 0); if ($pr_bits) { $pr_bits = md5($pr_bits, TRUE); } } catch (Exception $ex) { // echo 'Exception: ' . $ex->getMessage(); } } if (strlen($pr_bits) < 16) { // Inform the administrator of the missing pseudorandom generator }
Ingat untuk memasukkan kedua-dua percubaan sumber entropi dalam kod anda untuk kemudahalihan maksimum. Walaupun kaedah ini mungkin tidak mudah, ia menawarkan peningkatan yang ketara dalam keselamatan berbanding pendekatan berasaskan benih awal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Nombor Rawak dengan Selamat dalam PHP untuk Aplikasi Seperti Tetapan Semula Kata Laluan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!