1
當從openssl ec -pubout ...
生成的PEM文件創建java.security.PublicKey
時,我得到一個InvalidKeyException: invalid key format
。 相同的代碼適用於RSA密鑰。 我在做什麼錯?從openssl以Java創建PublicKey時出現InvalidKeyException
公共密鑰讀取:
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAG0FCGgyhUeJYUXeXoiKOU4GiyTORZ
U9+OpadxpVWqPbNoSNcfK7Ea13eWOKXlUe22v4Clce3t5nrCEBkwqhhe/g==
-----END PUBLIC KEY-----
EC密鑰生成與OpenSSL的:
openssl ecparam -genkey -out private_key.pem -outform PEM -name prime256v1
openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out private_key.der -nocrypt
openssl ec -in private_key.pem -inform PEM -out public_key.pem -outform PEM -pubout
(我已經嘗試了不同的設置conv_form和param_enc)
Java代碼:
KeyFactory kf = KeyFactory.getInstance("EC");
byte[] privEncoded = ... // read from private_key.der file
PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(privEncoded);
PrivateKey privKey = kf.generatePrivate(privSpec);
byte[] pubEncoded = .... // read from public_key.pem file
X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(pubEncoded);
PublicKey pubKey = kf.generatePublic(pubSpec); // <-- InvalidKeyException
編輯:與我上面所說的相反,當用新生成的PEM進行嘗試時,讀取RSA公鑰現在也會失敗。此外,加密然後解密失敗。剝離PEM中的BEGIN和END行,並按照GregS的建議將Base64轉換爲字節,解決了這個問題!
謝謝!現在生成公共密鑰以及加密和解密工作。 – oliverdm 2014-11-03 11:32:47