OpenSAML 3DES密钥大小错误:必须等于112或168

时间:2012-07-27 16:57:43

标签: encryption opensaml

我正在使用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中设置它?

1 个答案:

答案 0 :(得分: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);

希望这有帮助。