Извините, я бы прокомментировал этот пост, но пока не получил достаточного числа повторений.
Я бы использовал SHA256 для своего хэш-алгоритма и оставил бы итерации около 25. Более того,действительно излишним.Я использую очень похожее решение для фреймворка, который я применил к полдюжине сайтов.Я решил создать слишком сложный генератор случайных символов, но я использовал его во многих других местах, включая токенизацию финансовых данных.
Другое редактирование: используйте генератор случайных символов, подобный этому, для своей соли:
function randomChar($length) {
$characters = array("A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "~", "!", "@", "#", "%", "^", "&", "(", ")", ":", "{", "[", "]", "}", "|", "<", ">", ".", ",", "/", "?", "_", "+", "-", "=");
$charactersNumber = count($characters);
$charactersNumber--;
$randomLength = 0;
while ($randomLength < $length) {
$currentCharacter = $characters[rand(0,$charactersNumber)];
if ($currentCharacter == $previousCharacter) {
$currentCharacter = $characters[rand(0,$charactersNumber)];
}
$random .= $currentCharacter;
$previousCharacter = $currentCharacter;
$randomLength++;
}
return $random;
}
Ответ на итерационный вопрос: если x = хеш (пароль + соль) и с тех пор x = хеш (x + соль)
и 1 оценка x занимает 10 мс, то 2займет 20 и так далее.Итак ... 25 оценок = 250 мс и 1000 = 10 000 мс.
Хотя для каждого из них не потребуется 10 мс, даже 0,5 мс на 1000 все равно полсекунды.
Если вытолько принимаемые буквенно-цифровые пароли, и пароль был длиной 8 символов, каждая итерация добавляла бы на 62 ^ 8 (если они еще не нашли пароль) больше хэшей, потому что им пришлось бы делать другое, для каждой отдельной комбинации, которую они пробовали.*