我正在尝试使用java.security.PublicKey
和java.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加密库有任何关系?有人可以告诉我我的代码有什么问题吗?
答案 0 :(得分:0)
在用于实例化KeyFactory
致电
KeyFactory.getInstance(String algorithm)
时。这种方法 遍历注册安全提供程序列表,从 最喜欢的提供者。一个新的KeyFactory对象封装了 来自第一个支持的Provider的KeyFactorySpi实现 返回指定的算法。
在您的环境中,bouncy castle crypto
似乎是最受欢迎的提供商。
我不知道JDK中Service Provider Interface
的任何默认KeyFactory
。虽然有许多开源实现可用,但很少有RSAKeyFactory& DSAKeyFactory
嘿刚发现这个,JDK中也有许多默认实现。 look at this page for JCA