Я настоятельно рекомендую использовать таргетинг / dev / urandom в Unix-системах или crypto-api на платформе Windows в качестве источника энтропии для паролей.
Не могу не подчеркнуть, что важность реализации хеши НЕ волшебнаустройства, увеличивающие энтропию. Неправильное их использование не более безопасно, чем использование данных seed и rand () до их хеширования, и я уверен, что вы понимаете, что это не очень хорошая идея. Семя отменяется (детерминированный mt_rand ()), и поэтому нет никакого смысла даже включать его.
Люди думают, что они умны и умны, и результатом их труда являются хрупкие системы и устройства,безопасность их систем и безопасность других систем (с помощью плохих советов) под угрозой ненужного.
Два несправедливости не дают права. Система настолько сильна, насколько ее самая слабая часть. Это не лицензия и не предлог для того, чтобы принимать еще большую небезопасность.
Вот некоторый код PHP для получения безопасной случайной 128-битной строки, из этот комментарий на php.netby Mark Seecof :
"Если вам нужны некоторые псевдослучайные биты для целей безопасности или криптографии (яйцо, случайный IV для блочного шифра, случайная соль для хэша пароля) mt_rand () является плохим источникомНа большинстве платформ Unix / Linux и / или MS-Windows вы можете получить лучшую оценку псевдослучайных битов из ОС или системной библиотеки, например:
<?php
// get 128 pseudorandom bits in a string of 16 bytes
$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')) {
// http://msdn.microsoft.com/en-us/library/aa388176(VS.85).aspx
try {
$CAPI_Util = new COM('CAPICOM.Utilities.1');
$pr_bits .= $CAPI_Util->GetRandom(16,0);
// if we ask for binary data PHP munges it, so we
// request base64 return value. We squeeze out the
// redundancy and useless ==CRLF by hashing...
if ($pr_bits) { $pr_bits = md5($pr_bits,TRUE); }
} catch (Exception $ex) {
// echo 'Exception: ' . $ex->getMessage();
}
}
if (strlen($pr_bits) < 16) {
// do something to warn system owner that
// pseudorandom generator is missing
}
?>
Примечание: обычно безопасно оставить обапопытка чтения / dev / urandom и попытка доступа к CAPICOM в вашем коде, хотя каждый из них молча завершится неудачей на платформе другого. Оставьте их обоих там, чтобы ваш код был более переносимым. "