Я использую Apache Shiro в качестве своего уровня безопасности в своем приложении Spring и столкнулся с действительно странной ситуацией.
Во-первых, так настроена моя система безопасности. Когда пользователь регистрирует свой пароль, он хэшируется с помощью надежно сгенерированной случайной соли. Затем соль и хешированный пароль хранятся в моей БД. Все работает на 100%, когда они регистрируются и логин тоже работает, но потом проходит пара дней, и внезапно их хешированные пароли перестают соответствовать. Вот мой код:
import org.apache.shiro.codec.Base64;
import org.apache.shiro.crypto.hash.Sha256Hash;
public static void main(String[] args) {
String plainPassword = "testing";
String salt = "8AFTpriREtydSg39+37rQHNRyvZLuXqyXYgWXI55f1PbhbUQSeFGCLKsHpA6thZKs3uQeNNJHksqcV5oaNcr9lQiXMMyC8Duqr2aQaqyjLKpNMVlB69jJ7emNq0K6ccfBdv/O4JGT2U689LeNg6CqN+9kqW2GBgT2CIVOlapA34=";
System.out.println(new Sha256Hash(plainPassword.toCharArray(), Base64.decode(salt), 1024).toBase64());
}
Полученный хешированный пароль:
b8VLt/eKV8F5kwDjRgdkM+PAvQC8sk7Ooflt91juaXA=
Но пароль, который у меня есть в моей базе данных, которая работала и была сгенерирована той же солью пару дней назад, была:
xZNBNlUa8vRQq0qY5bbkETzZtzztGRTH2KZKijQdilU=
Итак, как вы можете себе представить, я в полном замешательстве. Кто-нибудь знает, если я делаю что-то не так? Или если я оставлю шаг.
Обновление 1: после регистрации нового пользователя в моей системе, похоже, что все другие пользователи в системе изменили свои пароли по какой-то причине. Так что это не имеет ничего общего с тем, как генерируется хэш пароля, и больше связано с моим уровнем доступа к базе данных.