Intereting Posts

сравнение hash () против crypt ()

В настоящее время я внедряю систему входа в систему. Я хочу сохранить пароль и соль в базе данных. Теперь я узнал, что есть функция hash() и crypt() которая, похоже, делает то же самое (действительна для SHA512).

hash() является более новым и, кажется, поддерживает больше хэширующих алограммов, чем crypt() . Или какие-либо другие различия, которые я должен знать / заботиться?

Редактировать:

 function generatePasswordHash($password){ $salt = base64_encode(mcrypt_create_iv(8)); $calculatedPasswordHash = crypt($password, '$1$' . $salt . '$'); return $calculatedPasswordHash; } 

Результат выглядит как $1$Qh6ByGJ9$zLn3yq62egvmc9D7SzA2u.

Здесь моя функция проверки пароля:

 function checkLoginData($username, $password){ global $db; $sql = "SELECT * FROM users WHERE username = :username"; $result = $db->ExecuteQuery($sql, array("username"=>$username)); if(!empty($result)){ $result = $result[0]; $savedPasswordHash = $result['password']; $splitted = explode("$", $savedPasswordHash); $salt = $splitted[2]; $calculatedPasswordHash = crypt($password, '$1$' . $salt . '$'); if($savedPasswordHash === $calculatedPasswordHash){ return true; } } return false; } 

Используйте hash для хэширования, например, при проверке целостности. Он напрямую использует указанный алгоритм хэширования.

crypt – функция специального назначения. Он используется для хэширования паролей и вывода ключей. Вам нужно будет пройти соль, которая косвенно определяет используемую схему хеширования. Даже если вы выберете CRYPT_SHA512 это не просто SHA512. Это ключевая функция деривации, которая использует SHA512 как строительный блок. В частности, такая схема преднамеренно медленна (атака с применением грубой силы) и безопасно сочетает соль и пароль.

Для хеширования паролей в системе журналов crypt , безусловно, является правильным выбором.