2012-12-27 81 views

回答

12

使用充气城堡的SubjectPublicKeyInfo,就像这样:

byte[] encoded = publicKey.getEncoded(); 
SubjectPublicKeyInfo subjectPublicKeyInfo = new SubjectPublicKeyInfo(
    ASN1Sequence.getInstance(encoded)); 
byte[] otherEncoded = subjectPublicKeyInfo.parsePublicKey().getEncoded(); 
+0

这也不符合pourpose。在这里我们刚刚将公钥转换成RSAPublicKey对象,但是当我说RSAPublicKey.getEncoded()时,我仍然得到x.509格式的密钥而不是RSA格式。 –

+0

编辑答案。希望你不介意使用BC。 – martijno

+0

非常感谢!你的方法奏效了。我张贴我使用的确切片段。 –

1

下面的代码片段工作对我来说,不得不虽然使用BouncyCastle的。

byte[] keyBytes = key.getEncoded(); // X.509 for public key 
SubjectPublicKeyInfo subPkInfo = new SubjectPublicKeyInfo((ASN1Sequence)ASN1Object.fromByteArray(keyBytes)); 
byte[] rsaformat = subPkInfo.getPublicKey().getDEREncoded(); 
+0

'getPublicKey()'现在是一个弃用的函数。 – ruckc

+0

'新的SubjectPublicKeyInfo(..)'也被弃用:使用'SubjectPublicKeyInfo.getInstance(...)'。 而不是'getPublicKey()'使用'parsePublicKey()'。 – Manuel

3

没有BouncyCastle的:

PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(publicKeyBinary));