2012-12-27 77 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));