2012-07-27 200 views
0

我使用OpenSAML加密我SAML response.I改变了我的算法是用AES为以下TripleDes的,现在它开始把我轰异常OpenSAML 3DES错误的密钥长度:必须等于112或168

//数据加密参数 - 秘密密钥

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中设置它?

回答

3

不能使用这种方法,而是应该使用SecurityHelper的其他方法generateKey如下图所示:

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

这里的区别是,你需要提供所有的细节,如算法名(在SunJCE,DESede是三重DES),密钥长度和JCA提供者名称(Here SunJCE)。

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

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

Credential symmetricCredential = SecurityHelper.getSimpleCredential(

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

//指定数据加密参数

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

希望这有助于。

相关问题