मैं मुख्य स्टोर को निम्नानुसार लोड कर रहा हूं:
try
{
ks = KeyStore.getInstance("BKS", "BC");
ks.load(ksStream, ksPass);
}
catch (IOException e)
{
if (e.getCause() instanceof UnrecoverableKeyException)
System.err.println("Wrong password!");
}
समस्या यह है कि अपवाद का कारण उछाल वाले महल द्वारा निर्धारित नहीं है (यह शून्य है)।
इसे कैसे ठीक करें?
1 उत्तर
यह निश्चित रूप से जानना संभव नहीं है कि क्या बीकेएस कीस्टोर को लोड करने में विफलता गलत पासवर्ड या डेटा भ्रष्टाचार या दोनों के कारण हुई थी। इस अनिश्चितता का कारण यह है कि बीकेएस प्रारूप में कोई ऐसा क्षेत्र नहीं है जो विशेष रूप से पासवर्ड की शुद्धता का परीक्षण करने के लिए है। जो कुछ भी उपलब्ध है वह एक संदेश प्रमाणीकरण कोड (मैक) है जिसे कीस्टोर के मुख्य भाग पर परिकलित किया जाता है। यदि मैक चेक सफल हो जाता है तो आप विश्वास कर सकते हैं कि पासवर्ड सहित सब कुछ सही है। यदि मैक विफल हो जाता है, तो समस्या पासवर्ड या डेटा भ्रष्टाचार या दोनों हो सकती है।
इस समस्या को व्यक्त करने के लिए IOException
का उपयोग एक खराब विकल्प है और संभवत: सन इंजीनियरों द्वारा मूल डिजाइन का एक अवशेष है। चूंकि बाउंसीकैसल जेसीई ढांचे में केवल एक इंजन है, इसलिए उन्हें अपवाद विनिर्देशों सहित KeyStore.load()
के लिए हस्ताक्षर का पालन करना होगा। बाउंसीकैसल के संस्करण में मैंने देखा कि अपवाद में एक विवरण संदेश "KeyStore integrity check failed."
शामिल है जो वास्तविक I/O समस्या के विपरीत मैक विफलता के कारण कम से कम अपवाद की पहचान कर सकता है।
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।