当前位置: 首页 > 面试题库 >

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

伍玮
2023-03-14
问题内容

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

问题答案:

我不确定这一点,但我相信JCE具有嵌入式策略,将对公钥的加密和对私钥的解密限制为限制。

在示例代码中,加密是通过私钥完成的。这将需要公共密钥进行解密,这意味着拥有公共密钥的任何人都可以访问编码数据。尽管有它的用途,但它不是公认的模式,并且IBM实现可能“保护”您免于意外创建公开可读的加密数据。

当这些错误被逆转时它可以正确测试的事实倾向于证实我的怀疑,但是我还没有找到一份说明那么多的正式文件。



 类似资料:
  • JCA提供者提出的解决方案是将JAR放在jre/lib/ext文件夹中,但不是从那里加载的。据我所知,这是由于OSGi(Eclipse equinox)类加载器策略将bootstrap类加载器作为每个bundle类加载器的父类,从而排除了从jre/lib/ext文件夹加载的扩展类加载器。即。在jre/lib/ext文件夹中没有一个bundle可以看到任何东西。 是否有一种方法可以让Eclipse

  • 问题内容: 人们为什么使用Bouncycastle而不是Java Cryptography Extension?有什么区别? 问题答案: 与 Sun提供的默认JCE相比,BouncyCastle具有更多的密码套件和算法。 除此之外,BouncyCastle还有许多实用程序可读取诸如PEM和ASN.1之类的奥秘格式,没有理智的人会想要重写自己。

  • 问题内容: Sun的PKCS11 JCE安全提供程序缺少我们需要的某些功能。 因此,我使用原始资源编写了它的增强版本。 不幸的是,JCE基础结构拒绝新的提供者 “ JCE无法验证提供者”, 因为它没有正确签名。 抛出。 (呼叫) 关于如何签署新提供商以使其与JCE一起工作的任何建议? 问题答案: 该过程在文档“如何实现 提供者”中进行了描述。 它涉及到电子邮件 太阳向Oracle提供一些信息(包括

  • 我有一个使用bouncycastle库的Java applet。当我在Eclipse上运行应用程序时,一切正常,但当我在带有标记的浏览器上使用applet时,当我添加安全BouncyCastleProvider时,它会引发异常。 我的stackTrace是: 我正在使用bcpkix-jdk15on-1.48.jar和bcprov-jdk15on-1.48.jar版本的BouncyCastle。为什

  • 我们有一个WebSphere JMS Queue和QueueConnectionFactory,提供程序为IBM MQ。我们不能直接连接到IBM MQ。 我有以下配置-我有bean jmsConnectionFactory,它使用InitialContext创建工厂。_queue是我的队列的JNDI名称 它因错误而失败 由:com.ibm.msg.client.jms.DetailedInvali

  • 从angular 4.4升级到5.0,并将所有HttpModule和Http更新到HttpClientModule后,我开始出现此错误。 我还再次添加了HttpModule,以确保这不是由于某些依赖关系造成的,但它并不能解决问题 应用程序内。模块,我已正确设置 我不知道这个错误是从哪里来的,或者我不知道如何去了解它。我也有一个警告(也放在下面),可能是相关的。 警告信息: