Использование crypt и проверка - не знаете, как это работает? - PullRequest
1 голос
/ 20 ноября 2011

На самом деле это два вопроса:

1) Насколько я понимаю, вы определяете, какой тип шифрования crypt() использует, сколько символов вы используете в соли.Например:

crypt('mypassword', someStringThatIs33CharsLong); // This would be blowfish?

2) Как только я получу эти данные, как я могу проверить их по вводу пользователя в будущем?Не работает следующее:

if (crypt($user_input, $encryptedinfo) == $encryptedinfo) {
   echo "Password verified!";
}

Что мне здесь не хватает?

Ответы [ 4 ]

2 голосов
/ 20 ноября 2011

Когда вы используете crypt, Salt (someStringThatIs33CharsLong) должен быть таким же, чтобы вы могли зашифровать что-то другое и иметь то же значение.Я использовал это для логина имени пользователя / пароля, где пароль вызывается с

crypt('password', 'aCrt45xaCrt45xaCrt45xaCrt45xaCrt4');

. При повторном шифровании вам нужно будет использовать ту же соль, чтобы убедиться, что она одинакова.Это можно сделать, сохранив в базе данных или статически.

Таким образом, ваш чек превратится в

if (crypt($user_input, someStringThatIs33CharsLong) == $encryptedinfo) {
   echo "Password verified!";
}
0 голосов
/ 20 ноября 2011

PHP crypt() использует солт-аргумент, чтобы определить, какой алгоритм использовать, но это не длина аргумента - это формат.Например, Blowfish выбирается путем предоставления соли в формате $2a$12$..., где ... - это 22 символа соли.

Учитывая, что $encryptedinfo был создан ранее с использованием:

$encryptedinfo = crypt(...);

тогда метод проверки пароля, который вы указали, верен.Например, следующий скрипт печатает "Password verified!":

$encryptedinfo = crypt('mypassword', '$2a$12$t4cmBQx3na8EAeNuWLwiN1');
if (crypt('mypassword', $encryptedinfo) == $encryptedinfo) {
   echo "Password verified!\n";
}
0 голосов
/ 20 ноября 2011

Вы должны использовать:

<?php
$crypt_pass = crypt('mypassword', 'salt');
?>

и

<?php
if(crypt('mypassword', 'salt') == $crypt_pass){
    echo 'Correct Pass';
}
?>

Надеюсь, это поможет!

0 голосов
/ 20 ноября 2011

Для хранения вам нужно будет поместить $encryptedinfo либо в страницу XML, либо в базу данных SQL, либо в $_COOKIE['encryptedinfo'] (я не советую ни последнюю, ни первую)

...