Я бы хотел использовать алгоритм PBEWITHHMACSHA256ANDAES_256
из SunJCE provider в Java8.Как использовать алгоритм PBEWITHHMACSHA256ANDAES_256 от JCE
Похоже, что банки и вся конфигурация находятся на месте из коробки в Java8, но я не могу использовать алгоритм PBEWITHHMACSHA256ANDAES_256
.
У меня есть эти две банки:
jdk1.8.0_40\jre\lib\jce.jar
jdk1.8.0_40\jre\lib\ext\sunjce_provider.jar
Там эта запись в jdk1.8.0_40\jre\lib\security\java.security
security.provider.5=com.sun.crypto.provider.SunJCE
Там эта запись в jdk1.8.0_40\jre\lib\security\java.policy
grant codeBase "file:${{java.ext.dirs}}/*" {
permission java.security.AllPermission;
};
Я могу видеть com.sun.crypto.provider.SunJCE
в массиве, когда я звонок Security.getProviders()
Но следующий код генерирует EncryptionOperationNotPossibleException
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.jasypt.exceptions.EncryptionOperationNotPossibleException;
import org.junit.Assert;
import org.junit.Test;
public class EncryptionTest {
@Test
public void test() {
SimpleStringPBEConfig pbeConfig = new SimpleStringPBEConfig();
pbeConfig.setAlgorithm("PBEWITHHMACSHA256ANDAES_256");
pbeConfig.setPassword("changeme");
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setConfig(pbeConfig);
String encrypted = encryptor.encrypt("foo");
String decrypted = encryptor.decrypt(encrypted);
Assert.assertEquals("foo", decrypted);
}
}
Exception
org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption raised an exception. A possible cause is you are using strong encryption algorithms and you have not installed the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files in this Java Virtual Machine
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.handleInvalidKeyException(StandardPBEByteEncryptor.java:999)
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.encrypt(StandardPBEByteEncryptor.java:868)
at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.encrypt(StandardPBEStringEncryptor.java:642)
at foo.bar.EncryptionTest.test(EncryptionTest.java:40)
Любые идеи, почему PBEWITHHMACSHA256ANDAES_256 бросает EncryptionOperationNotPossibleException?
Это потребует от каждого разработчика настройки их jre и потребует внесения изменений в jre на всех серверах. Есть ли динамическое решение, где я могу это сделать во время выполнения? –
№ Это известное ограничение на экспортные правила Java из США. Вы должны рассмотреть это как дополнительный шаг установки Java и документировать его. Это действительно легко забыть. Вы можете облегчить это, предоставив скрипту и двум файлам jar каждому разработчику, чтобы они сделали это правильно. Но сначала убедитесь, что все они запускают JDK/JRE для Java 8 (например, запуская '$ JAVA_HOME/bin/java -version'). Если вы устанавливаете Java JDK или JRE, это сломает этот JDK. –
Реальная альтернатива, хотя и заключается в том, чтобы реализовать алгоритм самостоятельно, с вашим собственным провайдером. Я бы настоятельно рекомендовал * против * его. В вашем профиле говорится, что вы живете в Великобритании, вы обычно имеете законный доступ к этому пакету и должны его использовать. –