IllegalArgumentException при вызове шифровальщиков Spring-Security-Crypto в тесте - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь написать тестовый пример JUnit для приведенного ниже кода. Я использую Encryptors библиотеки Spring-Security-Crypto. Когда я пытаюсь запустить код, я могу успешно зашифровать строку, но когда я запускаю тестовый пример, я получаю сообщение об ошибке.

код

public String standardEncryption(String value) {
        if (!isNullOrEmpty(value)) {
            return Encryptors.text(password, salt).encrypt(value);
        }
        return value;
    }

Тестовый набор Junit

@Test
    public void can_standardEncryption() {
        String value = someNumericString(10);

        String result = encryption.standardEncryption(value);

        assertThat(result).isNotNull();
        assertThat(result.equals(value)).isFalse();
        assertThat(textEncryptor.decrypt(result)).isEqualTo(value);
        assertThat(result.equals(textEncryptor.encrypt(value))).isFalse();
    }

Ошибка

java.lang.IllegalArgumentException: Unable to initialize due to invalid secret key

    at org.springframework.security.crypto.encrypt.CipherUtils.initCipher(CipherUtils.java:120)
    at org.springframework.security.crypto.encrypt.AesBytesEncryptor.encrypt(AesBytesEncryptor.java:115)
    at org.springframework.security.crypto.encrypt.HexEncodingTextEncryptor.encrypt(HexEncodingTextEncryptor.java:36)
    at something(something.java:25)
    at something(something.java:44)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
Caused by: java.security.InvalidKeyException: Illegal key size
    at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)
    at javax.crypto.Cipher.implInit(Cipher.java:805)
    at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
    at javax.crypto.Cipher.init(Cipher.java:1396)
    at javax.crypto.Cipher.init(Cipher.java:1327)
    at org.springframework.security.crypto.encrypt.CipherUtils.initCipher

1 Ответ

1 голос
/ 13 июня 2019

Звучит так, как будто вам может потребоваться включить клавиши большего размера.

По умолчанию Spring Security создает 256-битный ключ AES на основе предоставленного вами пароля. Однако в Java 8 по умолчанию не разрешены ключи такого размера.

Если вы на раньше, чем Java 8u151 , вам нужно загрузить jar и добавить его в свою установку, заменив то, что в $JAVA_HOME/jre/lib/security, тем, что вы загружаете.

Если вы используете Java 8u151 или новее , то этот jar политики поставляется по умолчанию, но его необходимо включить, раскомментировав следующую строку в $JAVA_HOME/jre/lib/security/java.security:

crypto.policy=unlimited

Или я считаю, что в OpenJDK это включено по умолчанию, поэтому вы также можете отключить JVM.

Источник: https://github.com/open-eid/cdoc4j/wiki/Enabling-Unlimited-Strength-Jurisdiction-Policy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...