一部のコンテンツをRSA秘密鍵で暗号化しようとしています。
私はこの例に従っています:
http
://www.junkheap.net/content/public_key_encryption_javaです
が、公開ではなく秘密鍵を使用するように変換しています。その例に従って、私がする必要があるのは次のとおりだと思います。
- DER形式の秘密鍵を読み込む
- PCKS8EncodedKeySpecを生成します
- KeyFactoryからgeneratePrivate()を呼び出して、秘密鍵オブジェクトを取得します
- その秘密鍵オブジェクトを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は使用するのに適切なkeyspecですか?
- 無効なキースペックエラーについて何か考えはありますか?