java - IBM 的 JCE 提供程序有什么问题?

标签 java jce

我有一个 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/

相关文章:

java - 确定平均值

java - 如何使用 JasperFillManager.fillReportToStream?

java - 查找 Matcher 找到匹配的捕获组

java - 为什么我没有得到任何输出?并且有一个InputMismatchException

java - 为 JCE 使用 fips 有什么好处?

java.security.NoSuchAlgorithmException : Algorithm PBKDF2WithHmacSHA1 not available

java - Android 中的 URL 未正确构建

java - 如何在Java中解密私钥(不使用BC openssl)

java - java 加密扩展 (JCE) 是否与 JRE bundle 在一起?

java - JCE 与项目一起部署,而不是 JDK 更新