Saya telah membuat kunci pribadi dengan:
openssl genrsa [-out file] –des3
Setelah ini saya telah membuat kunci publik dengan:
openssl rsa –pubout -in private.key [-out file]
Saya ingin menandatangani beberapa pesan dengan kunci pribadi saya, dan memverifikasi beberapa pesan lain dengan kunci publik saya, menggunakan kode seperti ini:
public String sign(String message) throws SignatureException{
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initSign(privateKey);
sign.update(message.getBytes("UTF-8"));
return new String(Base64.encodeBase64(sign.sign()),"UTF-8");
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
public boolean verify(String message, String signature) throws SignatureException{
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initVerify(publicKey);
sign.update(message.getBytes("UTF-8"));
return sign.verify(Base64.decodeBase64(signature.getBytes("UTF-8")));
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
Saya menemukan solusi untuk mengonversi kunci pribadi saya ke format PKCS8 dan memuatnya. Ia bekerja dengan beberapa kode seperti ini:
public PrivateKey getPrivateKey(String filename) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory kf =
KeyFactory.getInstance("RSA");
return kf.generatePrivate(spec);
}
Dan akhirnya pertanyaan saya adalah: Bagaimana cara memuat Kunci Publik RSA saya dari sebuah file?
Saya pikir mungkin saya perlu mengonversi file kunci publik saya ke format x509, dan menggunakan X509EncodedKeySpec
. Tapi bagaimana saya bisa melakukan ini?
Jawaban:
Di bawah ini adalah informasi yang relevan dari tautan yang disediakan Zaki .
Kunci pribadi
Kunci publik
sumber
InvalidKeyException
ketika saya mencoba dengan file yang saya buat denganssh-keygen -t rsa -b 2048
perintah. Dengan file yang dihasilkan dengan perintah dalam solusi itu berhasil..pem
format alih-alih.der
, Anda dapat menggunakan kelas PemReader BouncyCastle untuk menguraikannya sebelum meneruskannya keX509EncodedKeySpec
. Ingatlah untuk juga menentukan penyedia BouncyCastle saat Anda membuat instance KeyFactory.Program ini melakukan hampir semua hal dengan kunci publik dan pribadi. Format der dapat diperoleh tetapi menyimpan data mentah (tanpa encoding base64). Saya harap ini membantu programmer.
sumber
Setelah Anda menyimpan kunci dalam file PEM, Anda dapat membacanya kembali dengan mudah menggunakan kelas PemObject dan PemReader yang disediakan oleh BouncyCastle, seperti yang ditunjukkan dalam tutorial ini .
Buat kelas PemFile yang merangkum penanganan file:
Kemudian buat instance kunci pribadi dan publik seperti biasa:
Semoga ini membantu.
sumber
Kode di bawah ini berfungsi dengan baik untuk saya dan berfungsi. Kode ini akan membaca kunci pribadi dan publik RSA melalui kode java. Anda dapat merujuk ke http://snipplr.com/view/18368/
sumber