Я новичок в хранении паролей в базах данных и из того, что я прочитал, я создал простой скрипт php ниже
<?php $salt = openssl_random_pseudo_bytes (16); $password = "test"; $hash = hash ("sha512" , $salt . $password); echo $hash; ?>
Алгоритмы SHA * не подходят для хэш-паролей, потому что они слишком быстрые, и поэтому их можно слишком быстро перенаправить. Вместо этого следует использовать медленный алгоритм, такой как BCrypt или PBKDF2 с коэффициентом затрат, который контролирует необходимое время.
PHP поддерживает алгоритм BCrypt с новой функцией password_hash () . Также существует пакет совместимости для более ранних версий PHP.
// Hash a new password for storing in the database. // The function automatically generates a cryptographically safe salt. $hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT); // Check if the hash of the entered login password, matches the stored hash. // The salt and the cost factor will be extracted from $existingHashFromDb. $isPasswordCorrect = password_verify($password, $existingHashFromDb);
Рекомендуется, чтобы вы не передавали свою соль, вместо этого позвольте функции создать криптографически безопасную соль из случайного источника операционной системы.
Соль будет включена в итоговое значение хеша, поэтому вам не нужно хранить его отдельно. Просто создайте 60-значное строковое поле в своей базе данных и сохраните хэш-значение. Функция password_verify()
будет извлекать использованную соль из сохраненного значения хэш-функции. Для получения дополнительной информации вы можете ознакомиться с моим руководством по хранению паролей .
Если вы работаете (PHP 5 >= 5.5.0)
вы можете воспользоваться встроенной функцией хэширования паролей php.
Простое использование:
$options = [ 'cost' => 11, 'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), // or your own salt here ]; $pass_hash = password_hash("helloworld", PASSWORD_BCRYPT, $options); if (password_verify('helloworld', $pass_hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; }
Обычно я хранил соль с хешированным паролем. У меня есть свой собственный формат, чтобы распознать соль в виде хешированного пароля. например, хешированный пароль: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824, а соль – aaabbb. Я добавляю соль к хешированному паролю, например, 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824aaabbb. Поэтому я могу узнать, что последнее 6 слово – соль для этого хешированного пароля. Даже дБ взломали, они все еще не знали соли и настоящий пароль.