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

如何将bouncycastle getEncoded格式转换为RSA公钥的X.509格式

穆展鹏
2023-03-14

如果base64编码的公钥在调用“get encoded”时产生以下结果

mQENBFh1kBcBCADMUkNW2qFgeRnornjhT3lt73wTGcO9rt+Ktr1tcopmOPTfNq3
feZNFHRUsBt0Nnuj9+vSD2cwFRoZDNulhnBD8lAJYOD427uvV+KBDF/5pCQKh2S
mDK8tJI/ncLIlX4SFa8F9f36FySglpkzA59IFtHdUBz9w+PJRqUQ5MVRzNHYBbv
6aeIWwl46KrL3eibRgBDVuEOKAoesdb+xErs9cqg3KSVi01XBgr+XMSgOBz4J3f
J4HdibsJdz1+113aKT++4LUSuuyeVbw3K/ZgMkrsyeJw84sHhF2kDu61atSUsQE
nJwBF2sPA9V/i28fftxodgg5qbEs8egdsw/wxGzsfABEBAAG0K0NocmlzIFpoZW
5nIChjemhlbmcpIDxjemhlbmdAYXRsYXNzaWFuLmNvbT6JATkEEwEIACMFAlh1k
BcCGwMHCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRARY82BslwTrMvtB/4t
LoRH91p09vM1sSQ77RC+XwQqhhvN1BAeqGxqZpgCO6Ld5KRh8f4mFY8nXjDCSyy
ydTBzIUp6aG0f+2EBhArtk/oU/pi8D4zHoeBkrl23/234s1kBI5F2g2kd6itwP8
ekimaUyNFdPIN1dPwdxhuspOUtFNR+HsT3BT32v4Afd7sWVNTFrkapxTdxxZkVb
+FS0wbuzFzB2gb8AvEGevzF/hQXOf3r8QzUQoEZ14pigNu/arlXzEuzXJXXT/AQ
nAzbVENoFrhojxqEU7RxH8J4nao8OfpYfL7w3T7PC3nFFSTYSwvYItGkl9DPPiZ
GWZTrb6VfpFGNLHwCoLOaf8ShsAIAAA==

我怎么把它变成X.509?

我需要这样做的原因是创建一个java.Security.PublicKey对象。我在这里也问过:https://security.stackexchange.com/questions/150422/what-format-is-bouncycastle-opengpg-public-key/150427#150427,我确认它是一个长度为2048的密钥,但通常使用X.509标准读取公钥。如果有另一种方式来读它,那就太好了。

共有1个答案

公冶渝
2023-03-14

X.509是用于管理数字证书和公钥加密的公钥基础结构的标准。X509证书包括一个公钥、一组属性,如subjectissuerserialnumberkeyusage以及颁发证书的证书颁发机构的签名

因此,公钥和X509certificate的内容是不等价的。可以从证书中提取公钥,但使用公钥不可能推导出证书。事实上,几个X509证书可以包含相同的公钥

根据您的链接,密钥是OpenPGP格式的。Java没有这个键的默认读取器,但是您可以使用Bouncycastle(包bcpg)

//Convert key from base64 to binary
byte pubKeyBinary[] =DatatypeConverter.parseBase64Binary(pubKeyBase64);

//load Public key with bouncycastle
Security.addProvider(new BouncyCastleProvider());
PGPPublicKeyRing  pgpPub = new PGPPublicKeyRing(pubKeyBinary, new JcaKeyFingerprintCalculator());
PublicKey pubKey = 
   new JcaPGPKeyConverter().setProvider("BC").getPublicKey(pgpPub.getPublicKey());
 类似资料:
  • 我需要用java生成openssh格式的密钥对。 我使用java中的KeyPairGenerator生成了一个公私密钥对,并将其保存到一个文件中: 但是,如果我尝试使用这个与ssh-keygen我得到一个"失败加载密钥private.key:无效格式" 如何将PKCS#8私钥转换为openssh格式或生成openssh格式的密钥对?

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

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

  • 这是我生成RSA密钥的代码 现在我想转换DER/ASN.1编码字节,也知道使用Java JCE API生成RSA密钥时使用的默认编码格式是什么。

  • 我试图从已经生成的密钥对(两个s)中提取1024位RSA公钥,以便通过网络发送。我只需要一个普通的对,它应该正好占用131字节(模128字节,指数3字节)。 但是,当我以对象的形式获取密钥信息时,我得到的是140位,而不是131位。下面是一个示例结果: 在多次重试密钥生成并比较生成的对象后,所有密钥保持不变的字节是前7个: 最后三个字节看起来像指数(65537,一个公共值)。模数和指数之间还有两个

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