Sto tentando di crittografare del contenuto con una chiave privata RSA.Crittografia con chiave privata RSA in Java
Sto seguendo questo esempio: http://www.junkheap.net/content/public_key_encryption_java
ma la conversione in modo da utilizzare le chiavi private piuttosto che pubbliche. Seguendo questo esempio, penso che quello che ho bisogno di fare è:
- leggere in un DER-formato di chiave privata
- Generare un PCKS8EncodedKeySpec
- chiamata generatePrivate() da KeyFactory per ottenere un oggetto chiave privata
- utilizzare l'oggetto chiave privata con l'oggetto Cipher per fare la crittografia
Quindi, i passi:
la chiave è stato generato fro m OpenSSL con:
openssl genrsa -aes256 -out private.pem 2048
e poi è stato convertito in formato DER con:
openssl rsa -in private.pem -outform DER -out private.der
ho generare il PKCS8EncodedKeySpec con:
byte[] encodedKey = new byte[(int)inputKeyFile.length()];
try {
new FileInputStream(inputKeyFile).read(encodedKey);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(encodedKey);
return privateKeySpec;
e quindi generare la chiave privata oggetto con:
PrivateKey pk = null;
try {
KeyFactory kf = KeyFactory.getInstance(RSA_METHOD);
pk = kf.generatePrivate(privateKeySpec);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeySpecException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pk;
Tuttavia, la chiamata a:
pk = kf.generatePrivate(privateKeySpec);
ottengo:
java.security.spec.InvalidKeySpecException: Unknown key spec.
at com.sun.net.ssl.internal.ssl.JS_KeyFactory.engineGeneratePrivate(DashoA12275)
at com.sun.net.ssl.internal.ssl.JSA_RSAKeyFactory.engineGeneratePrivate(DashoA12275)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:237)
Domande:
- è l'approccio generale giusto?
- PCKS8EncodedKeySpec è il keyspec corretto da utilizzare?
- Qualche idea sull'errore della chiave non valida?
ho passato questo e li ha generati con Java: http://stackoverflow.com/questions/19640735/load-public-key-data-from -file – Hayro