2011-09-23 10 views
8

मेरे पास एक आरएसए निजी कुंजी फ़ाइल (OCkey.pem) है। जावा का उपयोग करके मुझे इस फाइल से निजी कुंजी मिलनी है। यह कुंजी नीचे openssl कमांड का उपयोग कर जेनरेट की गई है। नोट: मैं नीचे इस openssl कमांड पर कुछ भी नहीं बदल सकता।rava Privatekey.pem फ़ाइल से java.security.PrivateKey ऑब्जेक्ट कैसे प्राप्त करें?

openssl> req -newkey rsa:1024 -sha1 -keyout OCkey.pem -out OCreq.pem -subj "/C=country/L=city/O=OC/OU=myLab/CN=OCserverName/" -config req.conf 

प्रमाणपत्र नीचे जैसा दिखता है।

///////////////////////// ////////////////
बैश-3.00 $ कम OCkey.pem
----- BEGIN आरएसए निजी कुंजी -----
प्रो-टाइप: 4, एनक्रिप्टेड
DEK-जानकारी: डेस-EDE3-सीबीसी, EA1DBF8D142621BF

BYyZuqyqq9 + L0UT8UxwkDHX7P7YxpKugTXE8NCLQWhdS3EksMsv4xNQsZSVrJxE3
Ft9veWuk + PlFVQG2utZlWxTYsUVIJg4KF7EgCbyPbN1cyjsi9FMfmlPXQyCJ72rd
...
...
cBlG80PT4t27h01gcCFRCBGHxiidh5LAATkApZMSfe6BBv4hYjkCmg ==
----- END RSA निजी कुंजी -----
//////////////////////// //////////////////////////////////////

मैंने निम्नलिखित कोशिश की है

byte[] privKeyBytes = new byte[(int)new File("C:/OCkey.pem").length()]; 
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(privKeyBytes)); 

लेकिन हो रही

"java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: अमान्य कुंजी प्रारूप "

कृपया मदद करें।

+0

यकीन privatekey डीईआर प्रारूप में है और आप सही keyspec उपयोग कर रहे हैं। मेरा मानना ​​है कि आपको निजीकिबाइट्स के लिए पीकेसीएस 8 का उपयोग करना चाहिए। – Zaki

उत्तर

11

सुनिश्चित करें कि निजीकी डीईआर प्रारूप में है और आप सही कुंजीपटल का उपयोग कर रहे हैं। मेरा मानना ​​है कि आपको निजीकिबाइट्स

के लिए पीकेसीएस 8 का उपयोग करना चाहिए सबसे पहले, आपको निजी कुंजी को बाइनरी डीईआर प्रारूप में परिवर्तित करने की आवश्यकता है। यहाँ है कि कैसे आप इसे OpenSSL का उपयोग कर करना होगा:

openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out private_key.der -nocrypt 

अंत में,

public static PrivateKey getPrivateKey(String filename) throws Exception { 

     File f = new File(filename); 
     FileInputStream fis = new FileInputStream(f); 
     DataInputStream dis = new DataInputStream(fis); 
     byte[] keyBytes = new byte[(int) f.length()]; 
     dis.readFully(keyBytes); 
     dis.close(); 

     PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes); 
     KeyFactory kf = KeyFactory.getInstance("RSA"); 
     return kf.generatePrivate(spec); 
    } 
+0

मैं कुछ दिनों के लिए इसे हल करने का एक तरीका ढूंढ रहा हूं। महान समाधान हालांकि पीईएम पैरामीटर मेरे लिए काम नहीं करता था, लेकिन इसे छोड़ने से समस्याएं उत्पन्न नहीं होतीं। – homaxto

संबंधित मुद्दे