这是我生成 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 密钥时使用的默认编码格式是什么。
使用
SunRsaSign
提供程序创建的 RSA 密钥对由主要由 BigInteger
值组成的内部表示组成。 RSA毕竟是一种使用整数算法的算法。在内部,它不太可能以 ASN.1 进行编码,因为该算法无法使用二进制执行。您可以使用调试器浏览内部字段,但请注意,内部结构是实现细节,不应依赖。
要将公钥转换为 ASN.1,您只需调用
serverPublicKey.getEncoded()
,您将获得一个SubjectPublicKeyInfo 结构,这是为 X.509 证书定义的 ASN.1 数据结构,使用二进制 BER 编码方案(DER是 BER 的子集,通常编码与 DER 兼容)。它由一个序列组成,其中包含 OID(指示 RSA 密钥类型)和 PKCS#1 编码的公钥。您可以在这里、这里找到详细信息,当然还有RSAPublicKey结构在这里。
您还可以调用
serverPrivateKey.getEncoded()
来获取不受保护的内部 PKCS#8 结构。但是,您是否应该这样做是非常值得怀疑的。您不应分发未受保护的私钥。如果您需要存储它,请改用受良好保护的 PKCS#12 密钥存储。
这个问题你解决了吗?如果是这样,请支持我,我也在与 HSM thales 合作。谢谢!