2012-12-27 13 views
8

PublicKey.getEncoded(), SubjectPublicKeyInfo (x.50 9) प्रारूप में सार्वजनिक कुंजी युक्त बाइट सरणी देता है, मैं इसे आरएसए सार्वजनिक कुंजी एन्कोडिंग में कैसे परिवर्तित करूं?RSAPublicKey प्रारूप में SubjectPublicKeyInfo प्रारूप में एक सार्वजनिक कुंजी को परिवर्तित करना जावा

उत्तर

12

उपयोग Bouncy कैसल के SubjectPublicKeyInfo, इस तरह:

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

यह pourpose उपलब्ध नहीं कराता। यहां हमने सार्वजनिक कुंजी को एक RSAPublicKey ऑब्जेक्ट में डाला है, लेकिन जब मैं RSAPublicKey.getEncoded() कहता हूं, मुझे अभी भी x.50 9 प्रारूप में कुंजी मिलती है, न कि आरएसए प्रारूप। –

+0

उत्तर संपादित किया गया। आशा है कि आप बीसी का उपयोग नहीं करते हैं। – 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.getInstance (...) 'का उपयोग करें। और 'getPublicKey()' के बजाय 'parsePublicKey() 'का उपयोग करें। – Manuel

3
BouncyCastle बिना

:

PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(publicKeyBinary));     
संबंधित मुद्दे