String और Char[] ऐरे दोनों टेक्स्टुअल डेटा स्टोर करने के लिए उपयोग किए जाते हैं लेकिन एक को दूसरे पर चुनना अधिक कठिन है। शायद हमें String की इम्यूटेबिलिटी से अंदाजा लग सकता है कि char[] ऐरे को पासवर्ड, SSN आदि जैसी संवेदनशील जानकारी स्टोर करने के लिए String पर क्यों प्राथमिकता दी जाती है।
- प्लेन स्ट्रिंग का उपयोग करने पर पासवर्ड के लॉग्स या किसी अन्य असुरक्षित स्थान पर गलती से प्रिंट होने की बहुत अधिक संभावना होती है, जबकि char[] ऐरे कम वल्नरेबल होता है।
- चूंकि String इम्यूटेबल है, ऐसा कोई मेथड परिभाषित नहीं है जो हमें स्ट्रिंग के कंटेंट को बदलने या ओवरराइट करने की अनुमति दे। यह फीचर स्ट्रिंग ऑब्जेक्ट्स को पासवर्ड, SSN आदि जैसी सुरक्षित जानकारी स्टोर करने के लिए अस्थिर बनाता है। हमें सुरक्षित जानकारी को हमेशा char[] ऐरे में स्टोर करना चाहिए न कि String में।
- चूंकि String इम्यूटेबल है, यदि हम पासवर्ड को प्लेन टेक्स्ट के रूप में स्टोर करते हैं तो यह मेमोरी में तब तक उपलब्ध रहेगा जब तक गार्बेज कलेक्टर इसे क्लीन नहीं करता। चूंकि String पुन: उपयोग के लिए स्ट्रिंग कॉन्स्टेंट पूल (SCP) का उपयोग करता है, इसलिए काफी संभावना है कि यह लंबे समय तक मेमोरी में रहे। चूंकि जिस किसी के पास मेमोरी डंप का एक्सेस है वह प्लेन टेक्स्ट में पासवर्ड को आसानी से ढूंढ सकता है, यह एक और कारण है कि हमें प्लेन टेक्स्ट के बजाय एन्क्रिप्टेड पासवर्ड का उपयोग करना चाहिए।
- यदि हम जावा स्विंग एप्लिकेशन्स में देखें, तो JPasswordField का एक मेथड getPassword() है जो char[] रिटर्न करता है और डिप्रिकेटेड मेथड getText() जो पासवर्ड को प्लेन टेक्स्ट में रिटर्न करता है। इसलिए जावा खुद getPassword() मेथड का उपयोग करने की सिफारिश करता है।
- char[] ऐरे में पासवर्ड स्टोर करने का एक और कारण, क्योंकि char[] को सैनिटाइज किया जा सकता है, उदाहरण के लिए, उपयोग के बाद कोई क्लियर पासवर्ड को जंक से ओवरराइड कर सकता है, जबकि String जावा में इम्यूटेबल है।
उदाहरण
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