में फ़ाइल से PublicKey ऑब्जेक्ट कैसे उत्पन्न करें मेरे पास एक सार्वजनिक आरएसए कुंजी युक्त फ़ाइल है (ssh-keygen
के साथ उत्पन्न)। मैं फ़ाइल को पढ़ना चाहता हूं और PublicKey
ऑब्जेक्ट उत्पन्न करना चाहता हूं।जावा
उसके पहले मैं फ़ाइल परिवर्तित, के बाद से मूल फाइलों को पढ़ने के लिए असंभव प्रतीत हो रहा है:
# http://unix.stackexchange.com/questions/220354/how-to-convert-public-key-from-pem-to-der-format/220356#220356
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PEM > ~/.ssh/id_rsa.pub.pem
openssl rsa -RSAPublicKey_in -in ~/.ssh/id_rsa.pub.pem -inform PEM -outform DER -out ~/.ssh/id_rsa.pub.der -RSAPublicKey_out
Java - Encrypt String with existing public key file मैं समारोह readFileBytes
परिभाषित से:
public static byte[] readFileBytes(String filename) throws IOException {
Path path = Paths.get(System.getProperty("user.home") + filename);
return Files.readAllBytes(path);
}
अब मैं चाहते हैं फ़ाइल को पढ़ें और PublicKey ऑब्जेक्ट जेनरेट करें, लेकिन मुझे ऐसा करने का कोई तरीका नहीं मिला; java.security.spec.RSAPublicKeySpec
एक उपयुक्त निर्माता प्रदान नहीं करता है और java.security.spec.X509EncodedKeySpec
एक त्रुटि java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: algid parse error, not a sequence
फेंकता है:
//RSAPublicKeySpec publicSpec = new RSAPublicKeySpec(readFileBytes("/.ssh/id_rsa.pub.der"));
// No fitting construktor
X509EncodedKeySpec publicSpec = new X509EncodedKeySpec(readFileBytes("/.ssh/id_rsa.pub.der"));
// Gives: "algid parse error, not a sequence"
ठीक है, की तुलना में मैं हमेशा मिलता है "सार्वजनिक कुंजी को फिर से संगठित नहीं किया जा सका" - लेकिन मैं अभी भी नहीं जानता कि क्यों सार्वजनिक कुंजी का पुनर्निर्माण नहीं किया जा सकता, ... हो सकता है कि कुछ conversion- दौरान गलत हो गया प्रक्रिया, लेकिन क्या? टर्मिनल में मैन्युअल रूपांतरण के बिना सीधे 'ssh-keygen'- जेनरेट की गई फ़ाइलों को पढ़ने का तरीका भी अच्छा होगा। – Edward
@Edward मैंने आपके प्रश्न का उत्तर देने के लिए अपना उत्तर संपादित किया। – HyperZ
मैं 'ssh-keygen'' (आमतौर पर '~/.ssh/id_rsa.pub' में) के साथ जेनरेट की गई मौजूदा कुंजी को पढ़ने का प्रयास करता हूं। वे 'पीईएम' प्रारूप में प्रतीत होते हैं। मैं '~/.ssh/id_rsa' से निजी कुंजी को पढ़ने में कामयाब रहा, लेकिन सार्वजनिक कुंजी पढ़ना काम नहीं करता है। यह वास्तव में 'ssh-keygen' से उत्पन्न फ़ाइलों के साथ एक समस्या प्रतीत होता है (उम्मीद है कि अब यह स्पष्ट है)। [आपके उदाहरण के लिए +1] – Edward