使用RSAPublicKeySpec时出现InvalidKeySpecException

时间:2014-03-05 11:27:16

标签: java security rsa bouncycastle public-key

我正在尝试使用java.security.PublicKeyjava.security.spec.RSAPublicKeySpec来实例化java.security.KeyFactory

但是在运行以下行时:

RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(modulus, publicExponent);
return KeyFactory.getInstance("RSA").generatePublic(publicKeySpec);

我总是从org.bouncycastle包中获得异常。

java.security.spec.InvalidKeySpecException: key spec not recognised 
at org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic(Unknown Source) 
at org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi.engineGeneratePublic(Unknown Source) 
at java.security.KeyFactory.generatePublic(KeyFactory.java:315)
... (25 more)

这让我感到困惑,因为RSAPublicKeySpec应该与Bouncy Castle加密库有任何关系?有人可以告诉我我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

在用于实例化KeyFactory

的JDK文档中
  

致电KeyFactory.getInstance(String algorithm)时。这种方法   遍历注册安全提供程序列表,从   最喜欢的提供者。一个新的KeyFactory对象封装了   来自第一个支持的Provider的KeyFactorySpi实现   返回指定的算法。

在您的环境中,bouncy castle crypto似乎是最受欢迎的提供商。

我不知道JDK中Service Provider Interface的任何默认KeyFactory。虽然有许多开源实现可用,但很少有RSAKeyFactory& DSAKeyFactory

嘿刚发现这个,JDK中也有许多默认实现。 look at this page for JCA