我正在尝试为下面的代码编写一个JUnit测试用例。我使用的是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
发布于 2019-06-13 07:23:02
听起来您可能需要启用更大的密钥大小。
默认情况下,Spring Security根据您提供的密码创建256位AES密钥。但是,默认情况下,Java 8不允许使用这种大小的密钥。
如果您的版本早于Java8u151,那么您需要download a jar并将其添加到您的安装中,用您下载的内容替换$JAVA_HOME/jre/lib/security
中的内容。
如果您使用的是Java8u151或更高版本,那么缺省情况下会提供此策略jar,但需要通过取消注释$JAVA_HOME/jre/lib/security/java.security
中的以下行来启用此策略jar
crypto.policy=unlimited
或者,我相信OpenJDK在默认情况下已经启用了这个功能,所以您也可以关闭您的JVM。
来源:https://github.com/open-eid/cdoc4j/wiki/Enabling-Unlimited-Strength-Jurisdiction-Policy
https://stackoverflow.com/questions/56571343
复制相似问题