2014-03-05 48 views
0

我试图通过使用java.security.spec.RSAPublicKeySpecjava.security.KeyFactory实例化java.security.PublicKey使用RSAPublicKeySpec时出现InvalidKeySpecException

但运行以下线路时:

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应该有任何关系充气城堡密码库?有人可以告诉我我的代码有什么问题吗?

+0

你如何实例化'keyFactory'? –

+0

啊,对不起。我正在实例化它:'keyFactory = KeyFactory.getInstance(“RSA”);' – miho

回答

0

在JDK文档实例化KeyFactory

当你调用KeyFactory.getInstance(String algorithm)。此方法 遍历注册安全提供程序的列表,从 最优选的提供程序开始。将返回一个新的KeyFactory对象,该对象封装来自支持 指定算法的第一个Provider的 KeyFactorySpi实现。

看起来像你的环境中,bouncy castle crypto是最优先的提供商。

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

嘿刚刚发现这一点,有很多默认的实现在JDK也可用。​​