Создание соли с помощью фреймворка Portable PHP Password - PullRequest
1 голос
/ 26 января 2011

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

$dummy_salt = '$2a$08$1234567890123456789012';

if (isset($dummy_salt) && strlen($hash) < 20)
        $hash = $dummy_salt;

Интересно, хочу ли я использовать метод соглашения, который я могу сгенерировать уникальнымсолить и хранить его для каждого пользователя в моей базе данных, как я могу использовать Portable хэширование паролей PHP для генерации солей?

Это функция, которую я использую для хэширования паролей, но мне сказали, что sha512 имеет ту же проблемукак sha1, стоит довериться эксперту, например, Portable PHP хэшированию паролей,

function hash_sha512($phrase,&$salt = null)
{
    //$pepper = '!@#$%^&*()_+=-{}][;";/?<>.,';

    if ($salt == '')
    {
        $salt = substr(hash('sha512',uniqid(rand(), true).PEPPER_KEY.microtime()), 0, SALT_LENGTH);
    }
    else
    {
        $salt = substr($salt, 0, SALT_LENGTH);
    }

    return hash('sha512',$salt.PEPPER_KEY.$phrase);
}

Дайте мне знать, если у вас есть идеи.Спасибо.

1 Ответ

4 голосов
/ 26 января 2011

Из статьи phpass с этой страницы:

Помимо фактического хеширования, phpass прозрачно генерирует случайные соли когда новый пароль или пароль хэширует, и он кодирует тип хеша, соль и пароль растягиваются счетчик итераций в хэш строка кодирования ", что он возвращает. Когда phpass аутентифицирует пароль или пароль против сохраненного хеша, это аналогично прозрачно извлекает и использует идентификатор типа хеша, соль, и число итераций из «строка хэширования». Таким образом, вы не нужно заморачиваться с засолкой и растяжка самостоятельно - phpass занимает Забота о них для вас .

... поэтому неудивительно, что в примерах не используется соление! Возможно, вы перегружаете свой код.

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

...