【发布时间】:2019-03-15 07:41:55
【问题描述】:
我正在尝试在 Oracle 1.7 和 IBM 1.7 JDK 上运行以下代码。
KeyPairGenerator serverKpairGen = KeyPairGenerator.getInstance("RSA");
serverKpairGen.initialize(2048,new SecureRandom());
KeyPair serverKpair = serverKpairGen.generateKeyPair();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(serverKpair);
oos.close();
baos.close();
byte[] serializedObject = baos.toByteArray();
System.out.println(Base64.encode(serializedObject, false, false).length());
Oracle 默认使用 SunRsaSign 作为其 RSA 算法的默认提供者,而 IBM 使用 IBMJCE
IBMJCE 提供长度为 5100 字节的密钥对,而 Oracle 生成的密钥对长度接近 2800 字节。
我尝试将 SunJce 设置为提供程序,但它不支持 RSA 算法。
IBM SDK 1.6 或 1.7 中是否有将 SunRSASign 设置为提供者的功能?我观察到 SunRSASign 是 Oracle java 中 rt.jar 的一部分。 我们能否将 IBM java 中的 ServerKey 对大小减少到
我们能否在 IBM sdk 中获得类似于 Oracle jdk 的密钥长度? IBM 中是否有任何其他默认提供程序可以使用 RSA2048 提供更少的密钥大小。
【问题讨论】:
-
不要使用
Serializable接口来持久化密钥对。相反,坚持使用 PKCS12KeyStore。或者,使用它们的.getEncoded()方法分别保存 PublicKey 和 PrivateKey 组件。 -
感谢@JamesKPolk。你的建议确实奏效了。
标签: java sdk cryptography websphere rsa