Mam plik zawierający publiczny klucz RSA (wygenerowany przy użyciu ssh-keygen
). Chciałbym przeczytać plik i wygenerować obiekt PublicKey
.Jak wygenerować obiekt PublicKey z pliku w Javie
Wcześniej I konwertowane pliku, ponieważ czytanie oryginalnych plików wydaje się niemożliwe:
# 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
Od Java - Encrypt String with existing public key file zdefiniowałem funkcję readFileBytes
:
public static byte[] readFileBytes(String filename) throws IOException {
Path path = Paths.get(System.getProperty("user.home") + filename);
return Files.readAllBytes(path);
}
Teraz chciałabym przeczytaj plik i wygeneruj obiekt PublicKey, ale nie mogłem znaleźć sposobu na jego wykonanie; java.security.spec.RSAPublicKeySpec
nie zapewnia konstruktora montażu i java.security.spec.X509EncodedKeySpec
zgłasza błąd 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"
Cóż, niż ja zawsze „Nie można odtworzyć klucza publicznego” - ale ja nadal nie wiem dlaczego klucz publiczny nie może być odtworzone, ... Może coś poszło nie tak podczas conversion- proces, ale co? Byłoby również świetnie mieć sposób na odczytanie bezpośrednio wygenerowanych plików 'ssh-keygen', bez ręcznej konwersji w terminalu. – Edward
@Edward Edytowałem swoją odpowiedź, aby odpowiedzieć na twoje pytanie. – HyperZ
Próbuję odczytać istniejące klucze, które zostały wygenerowane za pomocą narzędzia 'ssh-keygen' (zazwyczaj w' ~/.ssh/id_rsa.pub'). Wydają się być w formacie "PEM". Udało mi się odczytać klucz prywatny z '~/.ssh/id_rsa', ale czytanie klucza publicznego nie działa. To naprawdę wydaje się być problemem z plikami wygenerowanymi przez 'ssh-keygen' (mam nadzieję, że teraz jest jasne). [+1 na Twój przykład] – Edward