SHA1 по сравнению с md5 по сравнению с SHA256: чтобы использовать для входа в систему PHP?

Я заставляю php войти в систему, и я пытаюсь решить, использовать ли SHA1 или Md5 или SHA256, о котором я читал в другой stackoverflow статье. Действительно ли какой-либо из них более безопасен, чем другие? Для SHA1/256 я все еще использую соль?

Кроме того, действительно ли это - безопасный способ сохранить пароль как хеш в mysql?

function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}

$salt = createSalt();

$hash = sha1($salt . $hash);
132
задан svick 30 January 2012 в 13:32
поделиться

2 ответа

Neither. Вы должны использовать bcrypt. Все упомянутые вами хэши оптимизированы для быстрой и легкой работы на аппаратном обеспечении, и поэтому их взлом обладает теми же качествами. Если у вас нет другого выбора, по крайней мере, обязательно используйте длинную соль и многократное повторение хэша.

Использование bcrypt в PHP 5.5+

PHP 5.5 предлагает новые функции для хэширования паролей. Это рекомендуемый подход для хранения паролей в современных веб-приложениях.

// Creating a hash
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
// If you omit the ['cost' => 12] part, it will default to 10

// Verifying the password against the stored hash  
if (password_verify($password, $hash)) {
    // Success! Log the user in here.
}

Если вы используете более старую версию PHP, вам действительно следует обновиться, но пока вы этого не сделали, вы можете использовать password_compat для использования этого API.

Также, пожалуйста, позвольте password_hash() генерировать соль для вас. Он использует [CSPRNG](http://

Два предостережения о bcrypt

  1. Bcrypt будет молча усекать любой пароль длиннее 72 символов.
  2. Bcrypt будет усекать после любых NUL символов.

(Доказательство концепции для обеих оговорок здесь.)

У вас может возникнуть соблазн решить первую оговорку путем предварительного хэширования паролей перед тем, как пропустить их через bcrypt, но это может привести к тому, что ваше приложение столкнется со второй.

Вместо того чтобы писать собственную схему, используйте существующую библиотеку, написанную и/или оцененную экспертами по безопасности.

TL;DR - Используйте bcrypt.

106
ответ дан 24 November 2019 в 00:12
поделиться

Используйте SHA256 . Это не идеально, так как SHA512 был бы идеальным для быстрого хеширования, но из возможных вариантов это определенный выбор. Как и в случае с любой технологией хеширования, не забудьте солить хеш для дополнительной безопасности.

В качестве дополнительного примечания, FRKT, пожалуйста, покажите мне, где кто-то может легко взломать соленый хеш SHA256? Мне действительно очень интересно это увидеть.

Важное изменение:

В дальнейшем используйте bcrypt в качестве усиленного хэша. Более подробную информацию можно найти здесь .


Редактировать при солении:

Используйте случайное число или случайный поток байтов и т. Д. Вы также можете использовать уникальное поле записи в своей базе данных в качестве соли, таким образом соль будет разной для каждого пользователя.

13
ответ дан 24 November 2019 в 00:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: