我正在尝试找出应该使用哪个 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/