2012-07-27 284 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); 

希望這有助於。

相關問題