В Spring Security, как правильно генерируется случайная соль при сравнении паролей?

Я использую Spring Security 3.1.1.RELEASE. Я использую функцию StandardPasswordEncoder.encode(password) для шифрования моих пользовательских паролей, которая основана на генерации случайной соли. Из источника безопасности Spring в конечном итоге этот метод вызывается из «org.springframework.security.crypto.keygen.SecureRandomBytesKeyGenerator» для генерации соли…

public byte[] generateKey() {
    byte[] bytes = new byte[keyLength];
    random.nextBytes(bytes);
    return bytes;
}

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


person Dave    schedule 10.12.2012    source источник


Ответы (2)


Нет. Если вы настроили Spring Security для хешированных паролей с солью, то при сравнении будет вызов поиска пользовательских данных. Как только запись пользователя найдена по имени пользователя, соль извлекается из поля пароля и используется для вычисления хэша пароля со страницы. А потом хеши сравниваются.

person damiankolasa    schedule 11.12.2012

Соль сохраняется в базе данных вместе с хешированным паролем, когда пользователь снова входит в систему, соль извлекается из базы данных, хэшируется с паролем и сравнивается с хэшем пароля в базе данных. Если они совпадают, пароль был правильным.

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

person G-Man    schedule 11.12.2012