Hi Tôi muốn trích xuất khóa công khai từ KeyStore sử dụng mã Javađọc khóa công khai từ tập tin trong keystore
tôi đang tạo ra một keystore
keytool -genkey -alias mykeystore -keyalg RSA -keystore mykeystore.jks -keysize 2048
Và xuất khẩu công chúng vào một tập tin
keytool -export -alias mykeystore -keystore mykeystore.jks -rfc -file publickey.cert
Làm cách nào để nhận chuỗi khóa công khai từ kho khóa hoặc tệp publickey.cert bằng mã Java?
Cảm ơn.
CẬP NHẬT
public static void main(String[] args) {
try {
FileInputStream is = new FileInputStream("/home/myuser/my-keystore/mykeystore.jks");
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
String password = "myuserpass";
char[] passwd = password.toCharArray();
keystore.load(is, passwd);
String alias = "mykeystore";
Key key = keystore.getKey(alias, passwd);
if (key instanceof PrivateKey) {
// Get certificate of public key
Certificate cert = keystore.getCertificate(alias);
// Get public key
PublicKey publicKey = cert.getPublicKey();
String publicKeyString = Base64.encodeBase64String(publicKey
.getEncoded());
System.out.println(publicKeyString);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Sau đó, nó được đưa ra như
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiG2FjSuXrraYuh0TyRNiUvVCyaFlb7VY9AFIMSDdcY0JgNF0c4YVQxYxUCbYzmkLZD/rrYMe/8nxkWV0TMz2Y7GnvichjtWHL1ui58uC0+RtFMkYJ+ftwt9qBy9hvb/rVFTsvT5/b6CQXD8a6bFveMUluQZISLCV7i11XYzp81+w6M7+2fJAwezIJnIrgwv1K9YDjWaToaNXe7hnzzy0s8AdkjTk197+hg8dRfbvkr8XAddNsEMPeUA5iY+5VEpRNI925ZT/dxnaABA0z6i4JbVjeLl8r7ySG9R/2w/j2G+/YSRQc9BmRHPa0tBgH7wvQM+WRwD9WmST+5qeBIfH3QIDAQAB
Khi tôi làm cat publickey.cert
, nó cho thấy này
-----BEGIN CERTIFICATE-----
MIIDgTCCAmmgAwIBAgIEf7XoMDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJJTjESMBAGA1UE
CBMJS2FybmF0YWthMRIwEAYDVQQHEwlCYW5nYWxvcmUxEjAQBgNVBAoTCU5ldHNjaXR1czESMBAG
A1UECxMJTmV0c2NpdHVzMRIwEAYDVQQDEwlOZXRzY2l0dXMwHhcNMTQxMTAzMDkyNTM3WhcNMTUw
MjAxMDkyNTM3WjBxMQswCQYDVQQGEwJJTjESMBAGA1UECBMJS2FybmF0YWthMRIwEAYDVQQHEwlC
YW5nYWxvcmUxEjAQBgNVBAoTCU5ldHNjaXR1czESMBAGA1UECxMJTmV0c2NpdHVzMRIwEAYDVQQD
EwlOZXRzY2l0dXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIbYWNK5eutpi6HRPJ
E2JS9ULJoWVvtVj0AUgxIN1xjQmA0XRzhhVDFjFQJtjOaQtkP+utgx7/yfGRZXRMzPZjsae+JyGO
1YcvW6Lny4LT5G0UyRgn5+3C32oHL2G9v+tUVOy9Pn9voJBcPxrpsW94xSW5BkhIsJXuLXVdjOnz
X7Dozv7Z8kDB7MgmciuDC/Ur1gONZpOho1d7uGfPPLSzwB2SNOTX3v6GDx1F9u+SvxcB102wQw95
QDmJj7lUSlE0j3bllP93GdoAEDTPqLgltWN4uXyvvJIb1H/bD+PYb79hJFBz0GZEc9rS0GAfvC9A
z5ZHAP1aZJP7mp4Eh8fdAgMBAAGjITAfMB0GA1UdDgQWBBSvgDYtI/NGP8Y0EvsCHASjmr/PmzAN
BgkqhkiG9w0BAQsFAAOCAQEACefje/dhmzEkBoA6OV934WtGXcBQNcb+9/qBGevUBG1cNJIyJddi
dea2gFUB1rx/WffTrJyiOCApV8wXG+zmGm6YJenKnGG9sIQtOTibhs3ll7UN4S0n9xsD+1y7YD1c
DNm9lI/3aFn1WUwPc3T4+RXE6XqkDB3geIvLUXaFUi+Y59XiLPHvk61kcopCGeoweX5yWVZ2Njp/
UUJIxQ6Ni3GvfPlxCxWtRe1MDAkhfT6/aAUr37lxtupHibzm9EAJdUEmAFHMhxkNCJiRDsasAiQ8
7V5uBI3ucdSwh+gPaW8KoWlJpv5SGlAkwzq0lSrxyq2ukkC6ciPeKhUvWtHaPg==
-----END CERTIFICATE-----
Họ phím khác nhau, ngay cả trong chiều dài. Tại sao?
Hi Hãy xem ** cập nhật ** trong câu hỏi – iCode
@iProgrammer Hi, để trả lời câu hỏi ở phần cuối của câu hỏi của bạn: Sự khác biệt là, publickey.cert là toàn bộ chứng chỉ và không chỉ chính khóa đó. Nó cũng chứa rất nhiều thông tin bổ sung. Xem http://en.wikipedia.org/wiki/Public_key_certificate#Contents_of_a_typical_digital_certificate –
Tôi hiểu điều đó. Nhưng xem khóa công khai tôi nhận được từ mã java và khóa công khai trong tệp public.cert. Chỉ cần kiểm tra vài ký tự đầu tiên, bạn có thể hiểu cả hai đều khác nhau. – iCode