java - 使用哪个 Sun 提供商来生成用于加密(加密)数据的 RSA key 对

标签 java encryption rsa jce jca

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

例如,在我的机器上,我目前有以下提供程序可用:

  • 太阳 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 key 对。但我不确定使用 SunRsaSign 生成的 key 对加密数据是否安全或是否有意义。

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

我的主要问题是:应该使用哪个 Sun 提供商来生成将用于加密 (未签名) 的 RSA key 对?

此外,SunRsaSign 生成的 key 对是否应该仅用于签署数据?因为这个提供者的名称中包含“Sign”一词,所以我认为它是专门用于签名的,但现在我不太确定了。

最后,使用 SunJSSE 生成的 key 对进行通用加密是否安全且有意义?如果是这样,SunJSSE 生成的 RSA 和 SunJSSE 生成的 RSA key 对有什么区别?

最佳答案

当然你可以看看所有注册的供应商:

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 key 对的唯一提供程序。请注意,加密是 javax.security 的一部分,这意味着它最初是一个可选的包/提供程序(因为密码学的导入/导出控制)。

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

关于java - 使用哪个 Sun 提供商来生成用于加密(加密)数据的 RSA key 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24494265/

相关文章:

C# RSA 公钥输出不正确

加密下一代 : Storing a key in the TPM

java - 它是否使用 "super"在重写方法中调用 Overriden 方法,我们是否在调用中进行重载?

java - 重新打开应用程序时获取 AsyncTask 状态

java - 如何从另一个 GUI 访问元素?

ios - AES 加密/解密 iOs 和 .Net

security - x.509 V3 扩展 Basic Constraints 和 Key Usage 创建 CA 证书的区别是什么?

c - 如何使用 libssl 对文件进行签名?

java - GC 日志中的 GC 暂停持续时间

encryption - 带加密的端口转发