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

问题描述 投票:0回答:2

这是我生成 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 密钥时使用的默认编码格式是什么。

java cryptography rsa asn.1 jce
2个回答
2
投票

使用

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 密钥存储。


0
投票

这个问题你解决了吗?如果是这样,请支持我,我也在与 HSM thales 合作。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.