Проверьте броски java .security.InvalidKeyException: null - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь написать сервис для обработки хеширования и проверки пароля пользователя. Я использую библиотеки Wildfly Elytron и использую сервис в контексте веб-сервиса quarkus. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь подтвердить пароль, метод verify выдает java.security.InvalidKeyException с сообщением null. Я использовал модульные тесты библиотеки (javatips. net) , чтобы основывать свою реализацию, и, насколько я могу судить, у меня все реализовано правильно. Поскольку исключение буквально не содержит сообщений, трудно понять, что не так, и поиск в Google не приносит особой пользы. Есть идеи?

    public PasswordService(
            PasswordValidator passwordValidator //my own password strength validator
    ){
        this.passwordValidator = passwordValidator;
        WildFlyElytronPasswordProvider provider = WildFlyElytronPasswordProvider.getInstance();

        try {
            this.passwordFactory = PasswordFactory.getInstance(ALGORITHM, provider);
        } catch (NoSuchAlgorithmException e) {
            LOGGER.error("Somehow got an exception when setting up password factory. Error: ", e);
            throw new RuntimeException(e);
        }
    }


    public String createPasswordHash(String password) throws PasswordValidationException {
        this.passwordValidator.validateAndSanitize(password);

        IteratedSaltedPasswordAlgorithmSpec iteratedAlgorithmSpec = new IteratedSaltedPasswordAlgorithmSpec(ITERATIONS, getSalt());
        EncryptablePasswordSpec encryptableSpec = new EncryptablePasswordSpec(password.toCharArray(), iteratedAlgorithmSpec);

        try {
            BCryptPassword original = (BCryptPassword) passwordFactory.generatePassword(encryptableSpec);
            return ModularCrypt.encodeAsString(original);
        } catch (InvalidKeySpecException e) {
            LOGGER.error("Somehow got an invalid key spec. This should not happen. Error: ", e);
            throw new WebServerException(e);
        }
    }

    public boolean passwordMatchesHash(String encodedPass, String pass) throws CorruptedKeyException{
        BCryptPassword original = null;
        try {
            original = (BCryptPassword) ModularCrypt.decode(encodedPass);
        } catch (InvalidKeySpecException e) {
            LOGGER.error("Somehow got an invalid key spec. This should not happen. Error: ", e);
            throw new WebServerException(e);
        }
        try {
            return passwordFactory.verify(original, pass.toCharArray()); // throws the invalid key exception
        } catch (InvalidKeyException e) {
            LOGGER.error("Somehow got an invalid key. This probably shouldn't happen? Error: ", e);
            throw new WebServerException(e);
        }
    }

1 Ответ

0 голосов
/ 05 февраля 2020

Разобрался. Исходная ссылка, которую я разместил для модульных тестов, устарела и, таким образом, была немного неправильной.

Фактические (актуальные) тесты

Мне не хватало оболочки для декодирования закодированного га sh:

original = (BCryptPassword) passwordFactory.translate(ModularCrypt.decode(encodedPass));

...