当前位置: 首页 > 知识库问答 >
问题:

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

陶树
2023-03-14

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

共有1个答案

夹谷腾
2023-03-14

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

 类似资料:
  • 我的公共在ssh-rsa是: ssh rsa aaaab3nzac1yc2aaaaaadaqabaababaqclaxt5s/wux04oxbt9r59wcl45omau3m0063lfyja7ovqavr7/2kHtLF/LoCQCXSZMny8RTCGDjoXD7G/tGsyHFDHCI//Y1VDLE06AlDzrlu69DQY91 6gkhghgjh3sf6us5hxlihrbsflf8g

  • 问题内容: 我有以下格式的公钥 我需要将其转换为以下格式 基本上,问题是我正在使用用Java编写的第三方库。 第三方库使用Java类“ RSAPublicKeySpec”从字符串生成RSAPublicKey类型的实例。 我提供给该第三方库的字符串取自以下格式的文件: 仔细研究一下代码之后,我可以看到,如果我使用java类“ X509EncodedKeySpec”来加载此公共密钥,则代码的签名验证部

  • 我有以下公钥(作为示例): 我需要能够将其转换为可以插入ssh known_hosts文件的格式。例如: 谢了!

  • 我需要用java生成openssh格式的密钥对。 我使用java中的KeyPairGenerator生成了一个公私密钥对,并将其保存到一个文件中: 但是,如果我尝试使用这个与ssh-keygen我得到一个"失败加载密钥private.key:无效格式" 如何将PKCS#8私钥转换为openssh格式或生成openssh格式的密钥对?

  • 问题内容: PublicKey.getEncoded(),返回一个包含SubjectPublicKeyInfo(x.509)格式的公共密钥的字节数组,如何将其转换为RSA公共密钥编码? 问题答案: 使用Bouncy Castle’s ,如下所示:

  • 如果base64编码的公钥在调用“get encoded”时产生以下结果 我怎么把它变成X.509? 我需要这样做的原因是创建一个java.Security.PublicKey对象。我在这里也问过:https://security.stackexchange.com/questions/150422/what-format-is-bouncycastle-opengpg-public-key/15