0

我正在使用 OpenSAML 来加密我的 SAML 响应。我将算法从 AES 更改为 TRIPLEDES,如下所示,现在它开始向我抛出异常

//数据加密参数-秘钥

EncryptionParameters encParams = new EncryptionParameters();
encParams.setAlgorithm(EncryptionConstants.ALGO_ID_BLOCKCIPHER_TRIPLEDES);

java.security.InvalidParameterException: Wrong keysize: must be equal to 112 or 168
    com.sun.crypto.provider.DESedeKeyGenerator.engineInit(DashoA13*..)
    javax.crypto.KeyGenerator.init(DashoA13*..)
    javax.crypto.KeyGenerator.init(DashoA13*..)

我知道我需要将密钥大小设置为 168,但如何在 OpenSAML 中设置它?

4

1 回答 1

3

不能使用该方法,而应使用 SecurityHelper 的另一种方法 generateKey,如下所示:

SecurityHelper.generateKey("DESede", 168, "SunJCE");

此处的区别在于您需要提供所有详细信息,例如算法名称(在 SunJCE 中,DESede 是三重 DES)、密钥长度和 JCA 提供者名称(此处为 SunJCE)。

所以你应该做这样的事情:

//生成对称密钥用于数据加密

Credential symmetricCredential = SecurityHelper.getSimpleCredential(

                                SecurityHelper.generateKey("DESede", 168, "SunJCE"));

//指定数据加密参数

    EncryptionParameters encParams = new EncryptionParameters();
    encParams.setAlgorithm(EncryptionConstants.ALGO_ID_BLOCKCIPHER_TRIPLEDES);  
    encParams.setEncryptionCredential(symmetricCredential);

希望这可以帮助。

于 2012-10-18T10:24:01.727 回答