दोनों स्ट्रिंग और चार[] सरणी टेक्स्ट डेटा को स्टोर करने के लिए उपयोग किया जाता है लेकिन एक को दूसरे के ऊपर चुनना अधिक कठिन होता है। हो सकता है कि हम इस विचार को अपरिवर्तनीयता . से प्राप्त कर सकते हैं स्ट्रिंग क्यों char[] सरणी पासवर्ड . जैसे संवेदनशील जानकारी डेटा संग्रहीत करने के लिए स्ट्रिंग पर प्राथमिकता दी जाती है , एसएसएन, आदि.
- सादे स्ट्रिंग का उपयोग करने से लॉग या कुछ अन्य असुरक्षित स्थानों पर गलती से पासवर्ड प्रिंट होने की संभावना बहुत अधिक होती है जहां char[] सरणी कम असुरक्षित . है ।
- चूंकि स्ट्रिंग अपरिवर्तनीय है , ऐसी कोई विधि परिभाषित नहीं है जो हमें स्ट्रिंग की सामग्री को बदलने या अधिलेखित करने की अनुमति देती है। यह सुविधा स्ट्रिंग ऑब्जेक्ट को पासवर्ड . जैसी सुरक्षित जानकारी संग्रहीत करने के लिए अस्थिर बनाती है , एसएसएन, आदि। हमें हमेशा सुरक्षित जानकारी को स्ट्रिंग के बजाय चार [] सरणी में संग्रहीत करना चाहिए।
- चूंकि स्ट्रिंग अपरिवर्तनीय है यदि हम पासवर्ड को सादे पाठ के रूप में संग्रहीत करते हैं तो यह स्मृति में तब तक उपलब्ध रहेगा जब तक कि कचरा कलेक्टर इसे साफ करता है। चूंकि स्ट्रिंग का उपयोग S . किया गया है ट्रिंग कॉन्सटेंट पूल (एससीपी) एक स्ट्रिंग की पुन:प्रयोज्यता के लिए, इस बात की काफी संभावना होगी कि यह लंबे समय तक स्मृति में रहेगा। चूंकि कोई भी व्यक्ति जिसके पास मेमोरी डंप तक पहुंच है, वह आसानी से सादे पाठ में पासवर्ड ढूंढ सकता है, इसलिए एक अन्य कारण को एन्क्रिप्ट का उपयोग करना चाहिए। पासवर्ड सादे पाठ की तुलना में।
- अगर हम जावा स्विंग एप्लिकेशन में नोटिस करते हैं , JPasswordField . की एक विधि है पासवर्ड प्राप्त करें () जो char[] . लौटाते हैं और बहिष्कृत विधि getText() जो सादा पाठ में पासवर्ड लौटाते हैं। तो जावा स्वयं पासवर्ड प्राप्त करने की अनुशंसा करता है() विधि।
- पासवर्ड को char[] सरणी में संग्रहीत करने का एक अन्य कारण , क्योंकि चार [] को साफ किया जा सकता है, उदाहरण के लिए, उपयोग के बाद जंक के साथ एक स्पष्ट पासवर्ड को ओवरराइड कर सकते हैं, जबकि स्ट्रिंग जावा में अपरिवर्तनीय है।
उदाहरण
public class SecureInfoData { public static void main(String args[]) { String pwd = "string_pass_word"; System.out.println("String Password is: " + pwd); char charPwd[] = "char_pass_word".toCharArray(); System.out.println("Character Password is: " + charPwd); } }
आउटपुट
String Password is: string_pass_word Character Password is: [C@6d06d69c