Tôi cần biết nếu có thể lấy khóa từ KeyStore mà không cung cấp 'storepass'. Tài liệu here nói rằng "Khi truy xuất thông tin từ kho khóa, mật khẩu là tùy chọn; nếu không có mật khẩu, không thể kiểm tra tính toàn vẹn của thông tin đã truy xuất và cảnh báo được hiển thị"KeyStore nhận khóa mà không cần mật khẩu
Tuy nhiên khi tôi cố gắng lấy khóa mà không có mật khẩu tôi nhận được "java.lang.IllegalArgumentException: mật khẩu không được rỗng" ngoại lệ.
Tiếp theo là làm thế nào tôi đã tạo ra KeyStore
keytool -genseckey -alias "MyKey" -keystore KEYSTORE.jks -storepass "password" -storetype "JCEKS" -keyalg AES -keysize 128
Và tôi đã cố gắng để lấy nó như sau
final KeyStore keyStore = KeyStore.getInstance("JCEKS");
keyStore.load(new FileInputStream(new File("C:\\temp\\keytool\\KEYSTORE.jks")),
null);
final Key key = keyStore.getKey("myKey", null);
nào ném ngoại lệ sau đây
java.lang.IllegalArgumentException: password can't be null
at com.sun.crypto.provider.SunJCE_z.<init>(DashoA13*..)
at com.sun.crypto.provider.JceKeyStore.engineGetKey(DashoA13*..)
at java.security.KeyStore.getKey(KeyStore.java:763)
Tôi đã hiểu hoàn toàn tài liệu chưa? Có cách nào khác xung quanh điều này, vì tôi không thấy điểm trong lưu trữ 'storepass' trong rõ ràng trong mã của tôi, nơi mọi người có thể nhìn thấy nó, do đó làm cho mật khẩu vô dụng.
Có, có vẻ như tôi đã hiểu lầm ocumentation. Vì vậy, có một approch được đề nghị để có được xung quanh này? Tôi không thể có mật khẩu như vậy trong mã. Cảm ơn – Nishant
Vì vậy, vấn đề của bạn là để tránh các mật mã hardcoded trong mã? Đó là vấn đề phổ biến nhất.Bạn thực sự không thể làm nhiều về that.The cách tiếp cận recomended nói chung là yêu cầu mật khẩu từ người dùng.Nếu bạn không thể làm bạn có thể làm một cái gì đó phức tạp ví dụ mã hóa mật khẩu nhưng điều đó sẽ không thực sự mang lại cho bạn nhiều. Bạn cũng có thể ủy quyền trách nhiệm cho người dùng, tức là giữ an toàn cho hệ thống tệp. – Cratylus