这是我生成RSA密钥的代码
public static void generateRsaKeyPair() {
try {
KeyPairGenerator keyPairGene = KeyPairGenerator.getInstance("RSA");
keyPairGene.initialize(512);
KeyPair keyPair = keyPairGene.genKeyPair();
serverPublicKey = (RSAPublicKey) keyPair.getPublic();
serverPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
} catch (Exception e) {
e.printStackTrace();
} finally{
}
}
现在我想转换DER / ASN.1编码字节,也知道使用Java JCE API生成RSA密钥时使用的默认编码格式是什么。
答案 0 :(得分:1)
使用SunRsaSign
提供程序创建的RSA密钥对由主要由BigInteger
值组成的内部表示组成。 RSA毕竟是一种使用整数算法的算法。在内部,它不太可能在ASN.1中编码,因为无法使用二进制执行算法。您可以使用调试器浏览内部字段,但请注意,内部结构是一个实现细节,不应该依赖它。
要将公钥转换为ASN.1,您只需调用serverPublicKey.getEncoded()
即可获得SubjectPublicKeyInfo结构,该结构是为X.509证书定义的ASN.1数据结构,使用二进制BER编码编码方案(DER是BER的子集,通常编码与DER兼容)。它由一个包含OID(表示RSA密钥类型)和PKCS#1编码公钥的序列组成。您可以在here,here中找到详细信息,当然也可以在here中构建RSAPublicKey。
您也可以调用serverPrivateKey.getEncoded()
来获得一个不受保护的内部PKCS#8结构。但是,你应该这样做是非常值得怀疑的。您不应分发不受保护的私钥。如果您需要存储它,请使用受到良好保护的PKCS#12密钥存储区。