Документация объясняет явление, которое вы испытываете. Второй аргумент документации гласит:
Необязательная солевая строка для основы хеширования. Если не указано иное, поведение определяется реализацией алгоритма и может привести к неожиданным результатам.
Есть все шансы, что вы получите 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)
вызова.