मेरी ऐप में मैं एक सार्वजनिक/निजी कुंजी जोड़ी उत्पन्न करता हूं और डिस्क पर बाद में उपयोग के लिए उन्हें संग्रहीत करता हूं। निजी कुंजी लोड हो रहा है और पुनः आरंभ करना ठीक काम करता है लेकिन निजी कुंजी के लिए मुझे अज्ञात कीस्पेक प्रकार मिलता है: java.security.spec.PKCS8EncodedKeySpec - और मुझे नहीं पता कि क्यों।फ़ाइल से सार्वजनिक कुंजी डेटा लोड करें
है कि मैं कैसे बना सकते हैं और कुंजियों (कोड थोड़ा आसान हो करने के लिए सरल पढ़ने के लिए) को बचाने:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(4096);
KeyPair keyPair = kpg.generateKeyPair();
privKey =keyPair.getPrivate();
pubKey =keyPair.getPublic();
DataOutputStream out=new DataOutputStream(ctx.openFileOutput(PRIVKEY_FILE,Context.MODE_PRIVATE));
byte[] data=privKey.getEncoded();
out.write(data);
out.close();
DataOutputStream out=new DataOutputStream(ctx.openFileOutput(PUBKEY_FILE,Context.MODE_PRIVATE));
byte[] data=pubKey.getEncoded();
out.write(data);
out.close();
निजी कुंजी का अगला लोड हो रहा है ठीक काम करता है:
DataInputStream in=new DataInputStream(ctx.openFileInput(PRIVKEY_FILE));
byte[] data=new byte[in.available()];
in.readFully(data);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(data);
KeyFactory kf = KeyFactory.getInstance("RSA");
privKey = kf.generatePrivate(keySpec);
decryptCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
decryptCipher.init(Cipher.DECRYPT_MODE, privKey);
इसी कोड के लिए सार्वजनिक कुंजी बुरी तरह विफल हो जाती है:
DataInputStream in=new DataInputStream(ctx.openFileInput(PUBKEY_FILE));
byte[] data=new byte[in.available()];
in.readFully(data);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(data);
KeyFactory kf = KeyFactory.getInstance("RSA");
pubKey = kf.generatePublic(keySpec); --> here the exception is thrown
encryptCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
encryptCipher.init(Cipher.ENCRYPT_MODE, pubKey);
तो मैं क्या गलत कर रहा हूं? डिस्क से सार्वजनिक कुंजी डेटा लोड करने का सही तरीका क्या है?
धन्यवाद!