gpt4 book ai didi

java - 将 RSA 公钥(1024 位)格式转换为 Java 的 DER ASN.1 公钥

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:23 27 4
gpt4 key购买 nike

这是我生成RSA key 的代码

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 key 时使用的默认编码格式是什么。

最佳答案

使用 SunRsaSign 提供程序创建的 RSA key 对包含一个主要由 BigInteger 值组成的内部表示。 RSA毕竟是一个使用整数算法的算法。在内部,它不太可能在 ASN.1 中编码,因为该算法无法使用二进制执行。您可以使用调试器浏览内部字段,但请注意内部结构是实现细节,不应依赖。

要将公钥转换为 ASN.1,您只需调用 serverPublicKey.getEncoded(),您将获得一个 SubjectPublicKeyInfo 结构,这是为 X 定义的 ASN.1 数据结构。 509 证书,使用二进制 BER 编码方案进行编码(DER 是 BER 的子集,通常编码与 DER 兼容)。它由一个序列组成,该序列包含一个 OID(指示 RSA key 类型)和 PKCS#1 编码的公钥。您可以在 here 中找到详细信息, here当然还有在 here 中构造 RSAPublicKey .

您还可以调用 serverPrivateKey.getEncoded() 来获取不 protected 内部 PKCS#8 结构。但是,您是否应该这样做是非常值得怀疑的。您不应分发未 protected 私钥。如果您需要存储它,请改用保护良好的 PKCS#12 key 存储。

关于java - 将 RSA 公钥(1024 位)格式转换为 Java 的 DER ASN.1 公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50530513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com