哪个Sun提供程序用于生成RSA密钥对以加密(加密)数据

时间:2014-06-30 15:58:28

标签: java encryption rsa jce jca

我试图找出哪些Sun加密提供程序应该用于生成将在Java中使用加密数据的RSA密钥对。我知道还有其他提供商,如Bouncy Castle,但我想使用其中一个Sun Providers。 (算法:RSA,密钥大小2048)

例如,在我的机器上,我目前有以下提供商:

  • SUN 1.7
  • SunRsaSign 1.7
  • SunEC 1.7
  • SunJSSE 1.7
  • SunJCE 1.7
  • SunJGSS 1.7
  • SunSASL 1.7
  • XMLDSig 1.0
  • SunPCSC 1.7

我以前使用提供程序SunRsaSign生成用于签名数据的RSA密钥对。但我不确定它是否安全,或者使用SunRsaSign生成的密钥对加密数据是否有意义。

我注意到提供商SunJSSE包含:sun.security.rsa.RSAKeyPairGenerator

我的主要问题是:哪些Sun提供商应该用于生成将用于加密 (不签名)的RSA密钥对?

另外,SunRsaSign生成的密钥对是否只用于签名数据?因为这个提供者的名字包含单词“Sign”,所以我认为它专门用于签名,但现在我不太确定。

最后,是否安全并且使用SunJSSE生成的密钥对进行常规加密是否有意义?如果是这样,SunJSSE生成的RSA与SunJSSE生成的RSA密钥对之间有什么区别?

2 个答案:

答案 0 :(得分:2)

当然,您可以查看所有已注册的提供商:

Provider[] providers = Security.getProviders();
for (Provider provider : providers) {
    Set<Service> services = provider.getServices();
    for (Service service : services) {
        service.getAlgorithm();
        // find algorithm and retrieve service information
    }
}

但在这种情况下解决方案会更简单:

KeyPairGenerator kpgen = KeyPairGenerator.getInstance("RSA");
Provider kpgenProv = kpgen.getProvider();
System.out.printf("Provider : %s%nInfo: %s%n", kpgenProv.getName(), kpgenProv.toString());

结果:

Provider : SunRsaSign
Info: SunRsaSign version 1.7

这可能是运行时唯一会生成RSA密钥对的提供程序。请注意,加密是javax.security的一部分,这意味着它最初是一个可选的包/提供者(因为加密的导入/导出控制)。

RSA密钥创建不是加密,因此它包含在提供RSA签名生成的SunRsaSign中。由于签名不用于提供机密性,因此它们被视为不太敏感的加密操作。

答案 1 :(得分:0)

文档表明SunJCE不提供RSA密钥,可以在SunRsaSign上创建。这样,使用两者都是必要的,一个得到密钥和另一个得到密码。

来自:https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunJCEProvider

SunRsaSign Provider -------------------------------------------- ----------------

的KeyPairGenerator:

RSA 1024 Keysize必须介于512和65536位之间,后者不必要大

SunJCE提供商-------------------------------------------- --------------------

的KeyPairGenerator

Diffie-Hellman(DH)1024 Keysize必须是64的倍数,范围从512到2048(含)。