2014-03-05 53 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也可用。​​