Bob*_*Bob 4 java rsa bouncycastle
我有以下 RSA 公钥作为 ASN1 序列:
\n\nSEQUENCE(2 elem)\n INTEGER (1024 bit) 14832\xe2\x80\xa6\n INTEGER 65537\nRun Code Online (Sandbox Code Playgroud)\n\n如何在 Java 中将此序列导入为 RSA 公钥?已实现的KeySpecs(例如PKCS8EncodedKeySpec)不起作用(显然)。
此外,我尝试使用 BouncyCastle 并手动解码序列并初始化java.security.spec.RSAPublicKeySpec自己。然而这种方法似乎相当笨拙。
有更容易的方法吗?
\n使用 BouncyCastle 进行 ASN.1 解析并不那么笨拙。
String key =
"30818902818100cc61f9ef5ad0bc21de5b3ca69ee725d2c504edf99a6e97a0279d9" +
"59f2364ed21aaef8c704552d5d1a3deb2ee1a0be1558e3ca182b11a8c14392b6de5" +
"2346bc7c88bf75e3fb2b9f27fab21f5cf19934e3110ea4ad72a6f073f8ab38b9939" +
"bb639e78ad7f434119d8cc2b1bde4eaf9513b056508c908ed43c99b0ceb222cbbe1" +
"ef0203010001";
byte[] keyBytes = DatatypeConverter.parseHexBinary(key);
// These will throw exception in case of type mismatch
ASN1Sequence sequence = ASN1Sequence.getInstance(keyBytes);
ASN1Integer modulus = ASN1Integer.getInstance(sequence.getObjectAt(0));
ASN1Integer exponent = ASN1Integer.getInstance(sequence.getObjectAt(1));
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus.getPositiveValue(),
exponent.getPositiveValue());
KeyFactory factory = KeyFactory.getInstance("RSA");
PublicKey publicKey = factory.generatePublic(keySpec);
System.out.println(publicKey.toString());
Run Code Online (Sandbox Code Playgroud)
另一种选择是将序列构建为 X509 公钥格式,然后使用X509EncodedKeySpec. 您需要将编码密钥作为位序列与算法标识符一起放入 ASN.1 序列中。然而,这将导致大约相同数量的代码,并且由于要解析的内容更多,速度会更慢。这个答案的格式得到了很好的解释。
| 归档时间: |
|
| 查看次数: |
6155 次 |
| 最近记录: |