मैं जावा में एक स्ट्रिंग (.pem
फ़ाइल) से निजी कुंजी जेनरेट करना चाहता हूं।जावा में * पेम स्ट्रिंग से आरएसए निजी कुंजी कैसे उत्पन्न करें
private static final String test = "-----BEGIN RSA PRIVATE KEY-----\n" +
"MIIEpAIBAAKCAQEAvcCH8WsT1xyrZqq684VPJzOF3hN5DNbowZ96Ie//PN0BtRW2\n" +
// and so on
"-----END RSA PRIVATE KEY-----";
try {
String privKeyPEM = test.replace("-----BEGIN RSA PRIVATE KEY-----\n", "");
privKeyPEM = privKeyPEM.replace("-----END RSA PRIVATE KEY-----", "");
byte [] encoded = Base64.decode(privKeyPEM);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey privKey = kf.generatePrivate(keySpec);
}
catch (Exception e) {
e.printStackTrace();
}
आखिरी पंक्ति (generatePrivate समारोह) इस अपवाद फेंक है:
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(Unknown Source)
at java.security.KeyFactory.generatePrivate(Unknown Source)
at Test.main(Test.java:52)
Caused by: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
at sun.security.pkcs.PKCS8Key.decode(Unknown Source)
at sun.security.pkcs.PKCS8Key.decode(Unknown Source)
at sun.security.rsa.RSAPrivateCrtKeyImpl.<init>(Unknown Source)
at sun.security.rsa.RSAPrivateCrtKeyImpl.newKey(Unknown Source)
at sun.security.rsa.RSAKeyFactory.generatePrivate(Unknown Source)
... 3 more
अगर मैं एक .der
फ़ाइल यह ठीक से काम से मूल्य के लिए निजी कुंजी बदलने के लिए, लेकिन मैं निजी उत्पन्न करने के लिए की जरूरत है .pem
फ़ाइल से मुख्य फ़ाइल।
मैंने स्ट्रिंग के रूप में मुद्रित बाइट्स का एक स्क्रीनशॉट संलग्न किया है (एक बार हार्ड-कोडेड \ n और एक बार हार्ड-कोड किए बिना \ n) और एक बार फ़ाइल से।
अजीब बात यह है कि फ़ाइल से उत्पादन तार से उत्पादन के लिए अलग है।
यदि मैं बेस 64 के साथ .der
फ़ाइल को एन्कोड करने का प्रयास करता हूं, तो परिणाम .pem
फ़ाइल में स्ट्रिंग से भिन्न होता है। ऐसा क्यों हैं?
क्या आपको कोई जवाब मिला? –
@ शंकरप वास्तव में नहीं। – Niklas
ठीक है। मुझे समाधान मिला है। "----- BEGIN आरएसए निजी कुंजी" से शुरू होने वाली कुंजी pkcs1 एन्कोडेड फ़ाइलें हैं। यह pkcs1 एन्कोडिंग जावा द्वारा समर्थित नहीं है जब तक कि आप बाहरी पुस्तकालय जैसे BouncyCastle। मैं कल एक ही मुद्दे में भाग गया और लगभग 8 घंटे बाद, समाधान मिला। यदि आप निजी कुंजी को pkcs8 के साथ एन्कोड करते हैं तो यह "--- BEGIN निजी कुंजी ---" जैसा शुरू होगा, जिसे स्टॉक जावा द्वारा संभाला जाएगा। HTH। –