在测试中调用spring-security-crypto的加密器时出现IllegalArgumentException

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (29)

我正在尝试为下面的代码编写一个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
提问于
用户回答回答于

听起来您可能需要启用更大的密钥大小。

默认情况下,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

热门问答

数据万象持久化在JavaScript SDK中的问题?

可以的,有Domain参数。请参考:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/csp/csp.html#L56

有谁用unity 3d 实现过对象的上传储存和者下载?

我不是米

腾讯 · 工程师 (已认证)

对象存储工程师
推荐

请正确填写bucket参数,bucket参数里面不要带上-appid

cos.sliceUploadFile支持断点续传吗?

如果用的是 cos-js-sdk,那么 cos.restartTask 是会断点续传的,用法没有问题。 PS: sdk 使用可以参考 demo.js https://github.com/tencentyun/cos-js-sdk-v5/blob/master/demo/demo...... 展开详请

使用独立H5接入人脸核身,在微信浏览器拍摄视频按钮无法点击?

旺仔小小鹿

社区 · 运营 (已认证)

Less is more
推荐

使用iframe会有问题 ,微信有限制,不允许使用iframe调用jsapi摄像头 ,微信里,不能用iframe

ios应该都不行的,安卓需要看是什么浏览器。

云服务器中ping不可达,请教一下如何恢复?

推荐已采纳
本地主机 ping 不通实例可能由以下问题导致: 目标服务器的设置不正确 域名没有正确解析 链路故障 在确保本地网络正常的前提下(即您可以正常 ping 通其他网站),可根据以下操作进行排查: 检查实例是否配置公网 IP 检查安全组设置 检查系统设置 检查域名是否备案 检查域名解...... 展开详请

为什么加固之后生成四个文件?

腾讯云@移动安全

腾讯 · 移动开发工程师 (已认证)

腾讯云移动安全前端开发
推荐

选择最后一个_legu_aligned_signed.apk 文件,这个是加固并已重签名的文件。

所属标签

扫码关注云+社区

领取腾讯云代金券