Проверьте, является ли строка хешем - PullRequest
1 голос
/ 13 апреля 2011

Я использую SHA-512 для хэширования своих паролей (с большой долей вероятности).Я не думаю, что то, что я хочу, возможно, но давайте все равно спросим.

Есть ли способ проверить, является ли строка хешем SHA-512 (или другим алгоритмом) уже?

Когда пользователь входит в систему, я хочу проверить его пароль.Если он все еще в текстовом виде, он должен быть преобразован в безопасную форму.

Ответы [ 6 ]

6 голосов
/ 13 апреля 2011

Ваша задача чрезвычайно проста и не требует проверки строк.

Сначала сравните введенный пароль с сохраненным.
Если подобрано - вот оно, простой пароль. Итак, вы можете начать процесс конвертации.

5 голосов
/ 13 апреля 2011

Как уже упоминалось @zerkms, длина строки - самая очевидная вещь, с которой вы можете проверить.Также хэши обычно пишутся в шестнадцатеричном формате, поэтому он состоит только из цифр от 0 до 9 и символов от a до f.Или как регулярное выражение

/[0-9a-f]{64}/i
2 голосов
/ 13 апреля 2011

Я немного смущен этим вопросом.

Когда пользователь вводит свой пароль на вашем веб-сайте, вы можете предположить, что значение в $_POST['password'] (или как вы его называете) в виде простого текста.Даже если пользователь использует результат хеш-функции в качестве своего пароля, это не имеет значения, поскольку для вашего приложения это все еще простой текст.Таким образом, хешированное значение является паролем пользователя, независимо от того, какие шаги они предприняли для его создания, поскольку запись этого значения в систему приводит к доступу для этого пользователя.Смысл хэширования пользовательских паролей на сервере заключается в том, что даже вы не знают пароль этого пользователя.Таким образом, если ваша база данных взломана, пароль пользователя не раскрывается.

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

Единственная причина, по которой я могу видеть действия, описанные вами, - это то, что вы ранее сохранили свои паролив простом тексте, и в настоящее время в процессе преобразования их всех в хэши.В этом случае вы должны просто назначить каждому пользователю уникальную соль, хэшировать его текущий текстовый пароль + соль и сохранить его как новый пароль.Это преобразование должно происходить сразу, когда «хэш-слова» включены, а не по частям, когда пользователи входят в систему в первый раз после перехода.

1 голос
/ 13 апреля 2011

Очевидно, что единственный способ предположить - это проверить длину строки.Могу поспорить, что ни у кого такой длинный пароль.

0 голосов
/ 13 апреля 2011

Вы можете хешировать пароль пользователя при отправке формы, для этого требуется javascript ofcourse.

function myOnSubmit(aForm) {
    //Getting the password input object
    var inputPassword = aForm['password'];

    //Hashing the password before submitting
    inputPassword.value = sha512_hash(inputPassword.value);

    //Submitting
    return true;
}

Ваша форма будет такой:

<form onsubmit="return myOnSubmit(this);">
<input type="text" name="login"><br>
<input type="password" name="password"><br>
<input type="submit" name="send">
</form>

Как я знаю, в JS нет встроенной функции sha512, поэтому вам нужна функция sha512, вы можете проверить this .

0 голосов
/ 13 апреля 2011

почему вы хотите проверять хешированный пароль во время входа в систему. Пользователь вставил хеш-строку в качестве пароля.

вы должны проверить вот так

if (sha1($input_password) === 'your hased password') {
    //go ahead
}
...