PHP Crypt () Сравнение двух зашифрованных строк

Можно ли сравнить две строки crypt Docs -ed и посмотреть, совпадают ли они?

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

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

РЕДАКТИРОВАТЬ:

Должен сказать, что я использовал следующий метод для шифрования пароля;

  function better_crypt($input, $rounds = 7) { $salt = ""; $salt_chars = array_merge(range('A','Z'), range('a','z'), range(0,9)); for($i=0; $i < 22; $i++) { $salt .= $salt_chars[array_rand($salt_chars)]; } return crypt($input, sprintf('$2a$%02d$', $rounds) . $salt); } 

Просто проверьте Руководство по PHP в crypt . В этом примере четко указано, как вы можете проверить пароль (так, как сравнивать).

 <?php $hashed_password = crypt('mypassword'); // let the salt be automatically generated /* You should pass the entire results of crypt() as the salt for comparing a password, to avoid problems when different hashing algorithms are used. (As it says above, standard DES-based password hashing uses a 2-character salt, but MD5-based hashing uses 12.) */ if (crypt($user_input, $hashed_password) == $hashed_password) { echo "Password verified!"; } ?> 

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

Просто будьте осторожны, чтобы crypt не был «очень» безопасным. Подробнее читайте в разделе Secure hash and salt для паролей PHP и ознакомьтесь с инструкцией по PHP для хеширования паролей: http://php.net/faq.passwords – это должно вас начать.

Хэшированные пароли можно сравнить для равенства.

Вы просто можете сравнить две строки с eachother. if ($ _SESSION ['hash'] == $ databasehash).

Зачем сравнивать два пароля? Могу ли я предложить вам создать таблицу сеансов в базе данных и проверить, не был ли пользователь еще включен в систему. Также привяжите это к IP или дайте пользователю возможность сделать это. Это повышает безопасность.

Кроме того, вы можете сохранить файл cookie, если пользователь вернется после истечения $ _SESSION. Сравните файл cookie с сохраненным IP-адресом и хешем, если он по-прежнему радует.

Да, это цель хеширования паролей.

Важным предостережением является то, что хеш-функции не являются реальными биективными картами, и они имеют определенную степень столкновения – просто указывая на то, что хеширование! = Шифрование.

Можно ли сравнить две зашифрованные строки и посмотреть, совпадают ли они? [для совпадения паролей]

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

Но убедитесь, что вы используете безопасную процедуру хэширования, такую ​​как bcrypt. Не используйте md5 для хэширования или sha1, или что-то в этом роде.

Также рекомендуется использовать проверенную библиотеку для управления вашими паролями, а не писать свои собственные. Я предлагаю этот вариант: https://github.com/ircmaxell/password_compat – он написан одним из основных разработчиков PHP, отвечающим за безопасность, и те же функции, предоставляемые этой библиотекой, будут встроены как часть самого PHP следующей версии PHP (v5.5), которая должна выйти через месяц или два, так что это тоже безопасно для будущего.