используя crypt в качестве хэша пароля и сравнивая значения? - PullRequest
0 голосов
/ 16 апреля 2011

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

Мне любопытно, почему это работает и получаетmatch:

$info['password'] == crypt($_POST['password'])

И сравнение одинаково, как это не делает:

$info['password'] === crypt($_POST['password'])

Есть идеи?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Документация объясняет явление, которое вы испытываете. Второй аргумент документации гласит:

Необязательная солевая строка для основы хеширования. Если не указано иное, поведение определяется реализацией алгоритма и может привести к неожиданным результатам.

Есть все шансы, что вы получите 10 различных значений при выполнении следующего:

<?php
$string = "password";
for ($i = 0; $i < 10; $i++) {
    echo crypt($string) . "\n";
}

Я получаю следующее:

$1$sWCzgR2e$vjR1CagStx0QbRYy/VbWm.
$1$C5TexeGI$ifWZ3mhGKthQ.ZW1UEswl/
$1$miA.EAYy$A6amxA.B4HvebndP/2ydx1
$1$izL6b3lz$hKncuA4oGv.8DAlAcybm..
$1$EqPefzSc$1XvQFf7pqFeuFz68lA1tv0
$1$njFWwWUo$NeQxtRHyUUzivVhidQSt5/
$1$LH3CVBV1$IIPPuHPUNL04ODtuRw0WR0
$1$/K75BwgK$MhSmhXtXF9Gn6ujx3YgE30
$1$OfddZpSQ$4u.dgsAWe4M/bOerUYTxr0
$1$G6JPvJpQ$aGvHluWRSy659MUe9P/aN.

Я бы рекомендовал использовать соль базы данных в качестве второго аргумента для вашего crypt($password, $salt) вызова.

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

оператор "==" проверяет, имеют ли две переменные одинаковое значение, а оператор "===" проверяет, имеют ли переменные одинаковое значение и тип: http://nz.php.net/manual/en/language.operators.comparison.php

так 1 == "1" это правда 1 === "1" не соответствует действительности

...