ये सभी कारण हैं, किसी को पासवर्ड के लिए स्ट्रिंग के बजाय एक चार [] सरणी का चयन करना चाहिए ।
1. चूंकि स्ट्रिंग्स जावा में अपरिवर्तनीय हैं, यदि आप पासवर्ड को सादे पाठ के रूप में संग्रहित करते हैं, तो यह मेमोरी में उपलब्ध होगा जब तक कि गारबेज कलेक्टर इसे साफ नहीं करता है, और चूंकि स्ट्रिंग को पुन: प्रयोज्य के लिए स्ट्रिंग पूल में उपयोग किया जाता है, इसलिए बहुत अधिक संभावना है कि यह हो सकता है लंबी अवधि के लिए स्मृति में बने रहें, जो सुरक्षा के लिए खतरा है।
चूंकि किसी के पास मेमोरी डंप तक पहुंच है, वह पासवर्ड को स्पष्ट पाठ में पा सकता है, यही कारण है कि आपको हमेशा सादे पाठ के बजाय एन्क्रिप्टेड पासवर्ड का उपयोग करना चाहिए। चूंकि स्ट्रिंग्स अपरिवर्तनीय हैं, इसलिए स्ट्रिंग्स की सामग्री को बदलने का कोई तरीका नहीं है क्योंकि कोई भी परिवर्तन एक नए स्ट्रिंग का उत्पादन करेगा, जबकि यदि आप एक चार [] का उपयोग करते हैं तो आप अभी भी सभी तत्वों को रिक्त या शून्य के रूप में सेट कर सकते हैं। तो एक चरित्र सरणी में एक पासवर्ड संग्रहीत करना स्पष्ट रूप से एक पासवर्ड चोरी करने के सुरक्षा जोखिम को कम करता है।
2. जावा खुद ही JPPwordField की getPassword () पद्धति का उपयोग करने की सिफारिश करता है जो कि एक चार्ट [] देता है, इसके बजाय हटाए गए getText () विधि जो स्पष्ट पाठ में पासवर्ड लौटाता है सुरक्षा कारणों से। जावा टीम की सलाह का पालन करना और उनके खिलाफ जाने के बजाय मानकों का पालन करना अच्छा है।
3. स्ट्रिंग के साथ लॉग फाइल या कंसोल में हमेशा प्लेन टेक्स्ट को प्रिंट करने का जोखिम होता है, लेकिन यदि आप एक ऐरे का उपयोग करते हैं, तो आप किसी ऐरे की सामग्री को प्रिंट नहीं करेंगे, लेकिन इसके बजाय इसकी मेमोरी लोकेशन प्रिंट हो जाती है। हालांकि एक वास्तविक कारण नहीं है, यह अभी भी समझ में आता है।
String strPassword="Unknown";
char[] charPassword= new char[]{'U','n','k','w','o','n'};
System.out.println("String password: " + strPassword);
System.out.println("Character password: " + charPassword);
String password: Unknown
Character password: [C@110b053
इस ब्लॉग से संदर्भित । आशा है कि ये आपकी मदद करेगा।