我有一个 JCE 测试,它适用于我尝试过的所有 Sun JDK,但无法适用于各种 IBM J9 JDK(例如 1.6.0 build pwi3260sr8-20100409_01(SR8))。当密码以加密模式初始化时,会发生以下异常。为什么IBM JCE 不能使用自己的私钥?我的代码中是否遗漏了什么?
public void testBasicKeyGeneration() throws NoSuchAlgorithmException,
NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException,
BadPaddingException, NoSuchProviderException, SignatureException {
KeyPairGenerator generator = KeyPairGenerator.getInstance( "RSA" );
generator.initialize( 2048 );
KeyPair pair = generator.generateKeyPair();
String data1 = "123456789012345678901234567890123456789012345678901234567890";
Cipher cipher = Cipher.getInstance( "RSA" );
cipher.init( Cipher.ENCRYPT_MODE, pair.getPrivate() );
byte[] encrypted = cipher.doFinal( data1.getBytes() );
cipher.init( Cipher.DECRYPT_MODE, pair.getPublic() );
byte[] decrypted = cipher.doFinal( encrypted );
String data2 = new String( decrypted );
assertEquals( "en/decryption failed", data1, data2 );
}
这是堆栈跟踪:
java.security.InvalidKeyException: Private key cannot be used to encrypt.
at com.ibm.crypto.provider.RSA.engineInit(Unknown Source)
at javax.crypto.Cipher.a(Unknown Source)
at javax.crypto.Cipher.a(Unknown Source)
at javax.crypto.Cipher.init(Unknown Source)
at javax.crypto.Cipher.init(Unknown Source)
at test.Test.testBasicKeyGeneration(LicenseHelperTest.java:56)
最佳答案
有解决办法,看http://www-01.ibm.com/support/docview.wss?uid=swg1IV18625
属性
-Dcom.ibm.crypto.provider.DoRSATypeChecking=false
您可以使用私钥来加密数据。
关于java - IBM 的 JCE 提供程序有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4869904/