Generate public key và private key sử dụng class KeyPairGenerator trong Java
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
Thuật toán mã hoá RSA sử dụng một cặp public key và private key để hiện thực cơ chế bảo mật. Public key dùng để mã hoá thông tin và private key được sử dụng để giải mã thông tin và ngược lại. Java cung cấp cho chúng ta một số class để làm việc với thuật toán RSA nằm trong package java.security. Trong bài viết này, mình hướng dẫn các bạn cách sử dụng class KeyPairGenerator của Java Security để generate một cặp public key và private key để sử dụng các bạn nhé!
Tuyển dụng lập trình Java lương cao
Mình sẽ tạo một main class để làm ví dụ như sau:
package com.huongdanjava.javaexample; public class Example { public static void main(String[] args) { } }
Đầu tiên, các bạn cần khởi tạo đối tượng KeyPairGenerator sử dụng phương thức static getInstance() với thuật toán RSA và kích thước 1024 hoặc 2048 như sau:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(2048);
Sử dụng phương thức generateKeyPair() của đối tượng KeyPairGenerator, các bạn sẽ generate được một cặp public key và private key, thông tin được chứa trong đối tượng KeyPair:
KeyPair keyPair = kpg.generateKeyPair();
Từ đối tượng KeyPair này, các bạn có thể lấy đối tượng chứa public key và private key như sau:
Key pub = keyPair.getPublic(); Key pvt = keyPair.getPrivate();
Các bạn có thể lấy thông tin định dạng của public key và private key như sau:
Key pub = keyPair.getPublic(); System.out.println("Public key format: " + pub.getFormat()); Key pvt = keyPair.getPrivate(); System.out.println("Private key format: " + pvt.getFormat());
Kết quả của mình khi chạy như sau:
Như các bạn thấy, định dạng mặc định của public key là X.509 và private key là PKCS#8. Các bạn tìm hiểu thêm về các định dạng này trên mạng nhé!
Để lưu lại public key và private key này ra file, các bạn có thể sử dụng phương thức sau:
public void generatePublicKeyAndPrivateKey(KeyPair keypair, String outputFileWithoutExtension) throws IOException { OutputStream out = new FileOutputStream(outputFileWithoutExtension + ".key"); out.write(keypair.getPrivate().getEncoded()); out.close(); out = new FileOutputStream(outputFileWithoutExtension + ".pub"); out.write(keypair.getPublic().getEncoded()); out.close(); }
Toàn bộ code ví dụ của mình như sau:
package com.huongdanjava.javaexample; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; public class Example { public static void main(String[] args) throws NoSuchAlgorithmException, IOException { KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(2048); KeyPair keyPair = kpg.generateKeyPair(); Key pub = keyPair.getPublic(); System.out.println("Public key format: " + pub.getFormat()); Key pvt = keyPair.getPrivate(); System.out.println("Private key format: " + pvt.getFormat()); generatePublicKeyAndPrivateKey(keyPair, "/Users/Khanh/Documents/huongdanjava"); } private static void generatePublicKeyAndPrivateKey(KeyPair keypair, String outputFileWithoutExtension) throws IOException { OutputStream out = new FileOutputStream(outputFileWithoutExtension + ".key"); out.write(keypair.getPrivate().getEncoded()); out.close(); out = new FileOutputStream(outputFileWithoutExtension + ".pub"); out.write(keypair.getPublic().getEncoded()); out.close(); } }
Các bạn hãy thay thế đường dẫn tới output file theo ý của mình nhé.
Chạy ví dụ rồi kiểm tra kết quả các bạn nhé!
Bài viết gốc được đăng tải tại huongdanjava.com
Có thể bạn quan tâm:
- Sử dụng binding Exchange to Exchange trong RabbitMQ
- Sử dụng publisher confirm trong RabbitMQ
- 50 keywords mà mọi lập trình viên java nên biết
Xem thêm tuyển dụng it hấp dẫn trên TopDev
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- i iOS 18 có gì mới? Có nên cập nhật iOS 18 cho iPhone của bạn?
- G Gamma AI là gì? Cách tạo slide chuyên nghiệp chỉ trong vài phút
- P Power BI là gì? Vì sao doanh nghiệp nên sử dụng PBI?
- K KICC HCMC x TOPDEV – Bước đệm nâng tầm sự nghiệp cho nhân tài IT Việt Nam
- T Trello là gì? Cách sử dụng Trello để quản lý công việc
- T TOP 10 SỰ KIỆN CÔNG NGHỆ THƯỜNG NIÊN KHÔNG NÊN BỎ LỠ
- T Tìm hiểu Laptop AI – So sánh Laptop AI với Laptop thường
- M MySQL vs MS SQL Server: Phân biệt hai RDBMS phổ biến nhất
- S SearchGPT là gì? Công cụ tìm kiếm mới có thể đánh bại Google?