Я пытаюсь зашифровать некоторый контент с помощью закрытого ключа RSA.
Я следую этому примеру: http://www.junkheap.net/content/public_key_encryption_java
, но преобразовав его для использования закрытых ключей, а не открытых. Следуя этому примеру, я думаю, что мне нужно сделать следующее:
- Читать в закрытом ключе в формате DER
- Создайте PCKS8EncodedKeySpec
- вызовите generatePrivate () из KeyFactory, чтобы получить объект закрытого ключа
- Используйте этот объект закрытого ключа с объектом Cipher для шифрования.
Итак, шаги:
Ключ был сгенерирован из openssl с помощью:
openssl genrsa -aes256 -out private.pem 2048
а затем был преобразован в формат DER с помощью:
openssl rsa -in private.pem -outform DER -out private.der
Я генерирую PKCS8EncodedKeySpec с помощью:
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;
А затем сгенерируйте объект закрытого ключа с помощью:
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;
Однако по призыву:
pk = kf.generatePrivate(privateKeySpec);
Я получил:
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)
Вопросы:
- Верен ли общий подход?
- Подходит ли PCKS8EncodedKeySpec для использования?
- Есть какие-нибудь мысли о неверной ключевой ошибке спецификации?