Ho un file contenente una chiave RSA pubblica (generata con ssh-keygen
). Mi piacerebbe leggere il file e generare un oggetto PublicKey
.Come generare l'oggetto PublicKey da un file in Java
Prima di questo ho convertito il file, dal momento che la lettura dei file originali sembra essere impossibile:
# 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
Da Java - Encrypt String with existing public key file ho definito la funzione readFileBytes
:
public static byte[] readFileBytes(String filename) throws IOException {
Path path = Paths.get(System.getProperty("user.home") + filename);
return Files.readAllBytes(path);
}
Ora mi piacerebbe leggere il file e generare l'oggetto PublicKey, ma non sono riuscito a trovare un modo per farlo; java.security.spec.RSAPublicKeySpec
non fornisce un costruttore di montaggio e java.security.spec.X509EncodedKeySpec
genera un errore 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"
Beh, che ho sempre trovato "Impossibile ricostruire la chiave pubblica" - ma ancora non so perché la chiave pubblica non può essere ricostruito, ... Forse qualcosa è andato storto durante la Conversion- processo, ma cosa? Sarebbe anche bello avere un modo per leggere direttamente i file 'ssh-keygen', senza la conversione manuale nel terminale. – Edward
@Edward Ho modificato la mia risposta per rispondere alla tua domanda. – HyperZ
Provo a leggere le chiavi esistenti che sono state generate con lo strumento 'ssh-keygen' (di solito in' ~/.ssh/id_rsa.pub'). Sembrano essere in formato 'PEM'. Sono riuscito a leggere la chiave privata da '~/.ssh/id_rsa', ma leggere la chiave pubblica non funziona. Sembra davvero essere un problema con i file generati con 'ssh-keygen' (speriamo sia ora chiaro). [+1 per il tuo esempio] – Edward