2015-04-28 7 views
11

मैं वर्तमान में JavaFX सीख रहा हूँ और मैं एक छोटा सा तथ्य JavaFX में PasswordField कोई विधि है जो एक चार या पासवर्ड की भी बाइट सरणी देता है के बारे में उलझन में हूँ। इसके बजाय मुझे getText() का उपयोग करना होगा जो स्ट्रिंग देता है।जावाएफएक्स पासवर्डफिल्ड स्ट्रिंग के रूप में सामग्री को क्यों लौटाता है?

जैसा कि आप here स्विंग पढ़ सकते हैं, स्विंग ने getText() विधि को चित्रित करने के लिए चिह्नित किया है और प्रोग्रामर को getPassword() का उपयोग करने के लिए कहता है, जो एक चार सरणी देता है।

यदि मैं सही तरीके से अनावश्यक करता हूं, तो चार सरणी बहुत सुरक्षित हैं क्योंकि आप उन्हें सभी मानों को 0 पर सेट करके पूरी तरह से राम से मिटा सकते हैं। फिर ओरेकल ने JavaFx में तारों का उपयोग करने का निर्णय क्यों लिया? ढेर से तार हटाने के लिए कोई नया तरीका है?

संपादित करें: जहाँ तक मुझे पता है चार पासवर्ड क्योंकि हम उन्हें जब कभी हम चाहते हैं (उन्हें अधिलेखित) जो स्ट्रिंग्स के लिए मामला नहीं है हटा सकते हैं, दूर सेवर कर रहे हैं।

+0

ऐसा लगता है कि आप की तरह बोल रहे हैं उसके कोई 'getPassword()' विधि, केवल एक 'gettext()' विधि है, जो आप पढ़ा है हाल ही में मान्य नहीं है। क्या आप एक पुरानी जावाएफएक्स लिब का उपयोग कर रहे हैं? यह समझा सकता है कि आपको यह विधि क्यों नहीं दिखाई दे रही है – mmcrae

+0

@mmcrae नहीं, JavaFX 8 में पासवर्ड फ़ील्ड को कोई तरीका नहीं है पासवर्ड विधि, जैसा कि आप यहां देख सकते हैं: [link] (https://docs.oracle.com/javase/8 /javafx/api/toc.htm) – Brotcrunsher

+1

मैं नहीं कहूंगा कि चार सरणी ** दूर ** सुरक्षित हैं। आप डेटा प्रकार के बावजूद वीएम की मेमोरी स्पेस में काम कर रहे हैं। इस [संबंधित पोस्ट] पर एक नज़र डालें (http://stackoverflow.com/questions/29368926/safe-way-to-get-password-from-passwordfield-in-javafx) और अधिक जानकारी के लिए इसकी टिप्पणियां। – OttPrime

उत्तर

0

वास्तव में, एक स्ट्रिंग सरणी अपने मौलिक कार्यान्वयन पर एक चार सरणी का उपयोग करती है। उनमें से दोनों वीएम में संग्रहीत हैं, और दोनों संभवतः असुरक्षित हैं।

आप, पासवर्ड को साफ और निशान को नष्ट करने की क्या jewelsea टिप्पणी में सुझाव दिया और अपने खुद के बारे में ऐसा कचरा कलेक्टर पर भरोसा करने की नहीं करना चाहते हैं।

क्यों करने के लिए के रूप में? एकमात्र इकाई जो वास्तव में उत्तर दे सकती है जावा में कुछ भी क्यों होता है ओरेकल।

0

आप जो कह रहे हैं वह बिल्कुल सही है, आप कचरा कलेक्टर पर भरोसा नहीं कर सकते हैं। हालांकि, एक char[] होने आप प्रोग्राम उदाहरण के लिए के साथ पात्रों स्पष्ट करने के लिए अनुमति देता है: Arrays.fill(password, (char)0);

char[] अभी भी स्मृति में मौजूद नहीं होगा, हालांकि सामग्री चला गया है।

मैं प्रश्न के मूल लेखक से सहमत हैं, एक विधि char[] getPassword() एक पासवर्ड क्षेत्र के लिए स्वीकार्य नहीं है नहीं।

संबंधित मुद्दे