Secure Text Entry Android में एक टेक्स्ट इनपुट मोड है जिसमें दर्ज किए गए कैरेक्टर वास्तविक कैरेक्टर के बजाय छिपे हुए रूप (डॉट्स या तारांकन) में प्रदर्शित होते हैं। इस मोड का उपयोग पासवर्ड फ़ील्ड, PIN कोड, CVV कोड और अन्य गोपनीय जानकारी के लिए किया जाता है। Secure Text Entry न केवल डेटा को विज़ुअल इंटरसेप्शन से बचाता है, बल्कि स्क्रीनशॉट, स्क्रीन रिकॉर्डिंग और ऑटोकरेक्ट सुविधाओं के माध्यम से लीकेज को भी रोकता है। Android Security Best Practices (2026) के अनुसार, उपयोगकर्ताओं के प्रमाणीकरण डेटा को संसाधित करने वाले अनुप्रयोगों के लिए छिपा हुआ इनपुट एक अनिवार्य आवश्यकता है।
मुख्य बिंदु
Secure Text Entry (संरक्षित टेक्स्ट इनपुट) एक Android सुविधा है जो प्रत्येक दर्ज किए गए कैरेक्टर के प्रदर्शन को एक मास्किंग कैरेक्टर, आमतौर पर एक डॉट (•) या तारांकन (*) से बदल देती है। यह कंधे पर झांककर (shoulder surfing) पासवर्ड पढ़ने से रोकता है और दर्ज किए गए डेटा को चुभती आँखों से छिपाता है। इस सुविधा को पासवर्ड मास्किंग के रूप में भी जाना जाता है और यह मोबाइल अनुप्रयोगों में एक मानक अभ्यास है।
iOS के विपरीत, जहाँ Secure Text Entry एक अलग UITextField सेटिंग है, Android में यह सुविधा PASSWORD वेरिएशन के साथ inputType विशेषता के माध्यम से सक्रिय होती है। जब EditText को inputType="textPassword" प्राप्त होता है, यह स्वचालित रूप से PasswordTransformationMethod लागू करता है — एक क्लास जो कैरेक्टर रिप्लेसमेंट के लिए जिम्मेदार है। प्रत्येक नए कैरेक्टर के दर्ज होने पर, EditText तुरंत TransformationMethod इंटरफ़ेस तंत्र के माध्यम से इसे मास्किंग कैरेक्टर से बदल देता है।
Android Source Code (AOSP, 2026) के अनुसार, PasswordTransformationMethod का कार्यान्वयन मास्किंग कैरेक्टर को रेंडर करने के लिए TextPaint क्लास का उपयोग करता है। मास्किंग कैरेक्टर का आकार फ़ील्ड के फ़ॉन्ट आकार से मेल खाता है, जो शब्द की लंबाई के माध्यम से सूचना लीकेज को रोकता है — सभी कैरेक्टर चौड़ाई में समान दिखते हैं। यह दर्ज किए गए डेटा की लंबाई के विश्लेषण पर आधारित हमलों से सुरक्षा के लिए महत्वपूर्ण है।
<!-- Basic Secure Text Entry example -->
@+id/etPassword
android:layout_width="match_parent"
android:hint="Enter password"
android:inputType="textPassword"
android:maxLength="64"
android:importantForAutofill="yes" />
Android में Secure Text Entry तंत्र android.text.method पैकेज में परिभाषित TransformationMethod इंटरफ़ेस पर आधारित है। PasswordTransformationMethod एक अंतर्निहित कार्यान्वयन है जो getTransformation() विधि को ओवरराइड करता है, प्रदर्शन के लिए एक बदली हुई कैरेक्टर अनुक्रम लौटाता है। Editable में मूल टेक्स्ट अपरिवर्तित रहता है — केवल इसका विज़ुअल प्रतिनिधित्व बदलता है।
जब उपयोगकर्ता एक कैरेक्टर दर्ज करता है, EditText dispatchEvent को कॉल करता है और कैरेक्टर को InputConnection को भेजता है, जो इसे Editable में जोड़ता है। फिर EditText वर्तमान TransformationMethod की getTransformation() विधि को कॉल करता है, जो मूल CharSequence लेता है और मास्किंग कैरेक्टर के साथ एक SpannableString लौटाता है। यह SpannableString मूल टेक्स्ट के बजाय स्क्रीन पर रेंडर होता है। मुख्य विशेषता यह है कि परिवर्तन स्वयं Editable सामग्री को नहीं बदलता है, इसलिए getText().toString() को कॉल करने पर वास्तविक दर्ज किया गया टेक्स्ट मिलता है।
Android Developers Reference (2026) के अनुसार, PasswordTransformationMethod प्रत्येक कैरेक्टर में एक MetricAffectingSpan जोड़ता है, जो ग्लिफ़ को एक डॉट से बदल देता है। ये स्पैन टेक्स्ट की लंबाई को प्रभावित नहीं करते हैं, इसलिए कर्सर और इनपुट स्थिति छिपे हुए प्रदर्शन के साथ भी सही रहती है। VisiblePasswordTransformationMethod भी मौजूद है, जो अंतिम दर्ज किए गए कैरेक्टर को थोड़े समय के लिए दिखाता है (iOS के समान)।
// PasswordTransformationMethod - built-in masking
editText.transformationMethod = PasswordTransformationMethod.getInstance()
// VisiblePasswordTransformationMethod - shows last char
editText.transformationMethod = VisiblePasswordTransformationMethod.getInstance()
दृश्यता टॉगल (password visibility toggle) एक सुविधा है जो उपयोगकर्ता को फ़ॉर्म सबमिट करने से पहले सत्यापित करने के लिए अस्थायी रूप से दर्ज किया गया पासवर्ड दिखाने की अनुमति देती है। Android में, यह सुविधा app:endIconMode="password_toggle" विशेषता के साथ TextInputLayout के माध्यम से कार्यान्वित की जाती है। आँख आइकन पर टैप करने पर, फ़ील्ड textPassword और textVisiblePassword के बीच स्विच होता है।
TextInputLayout में password_toggle का कार्यान्वयन स्वचालित रूप से आंतरिक EditText के inputType को बदलता है और आइकन को एनिमेट करता है (आँख खुली/बंद)। यह याद रखना महत्वपूर्ण है कि ऐसे स्विचिंग के दौरान कर्सर स्थिति रीसेट हो सकती है, इसलिए TextInputLayout मोड बदलने के बाद स्थिति को सहेजता और पुनर्स्थापित करता है। साथ ही, दृश्य पासवर्ड पर स्विच करते समय, ऑटोकरेक्ट और सुझाव सक्षम नहीं होते हैं — TYPE_TEXT_VARIATION_VISIBLE_PASSWORD का उपयोग किया जाता है, सामान्य टेक्स्ट का नहीं।
Material Design Guidelines (2025) के अनुसार, पासवर्ड दिखाने वाला आइकन हमेशा दिखाई देना चाहिए, न कि केवल जब फ़ील्ड फ़ोकस में हो। उपयोगकर्ता किसी भी समय पासवर्ड सत्यापित करने में सक्षम होना चाहिए। आइकन को एक निश्चित समय के बाद स्वचालित रूप से पासवर्ड नहीं छिपाना चाहिए — केवल उपयोगकर्ता की कार्रवाई पर।
<!-- TextInputLayout with password toggle -->
@+id/tilPassword
android:layout_width="match_parent"
app:endIconMode="password_toggle"
app:passwordToggleTint="@color/primary">
@+id/etPassword
android:inputType="textPassword"
android:hint="Password" />
</com.google.android.material.textfield.TextInputLayout>
Kotlin में Secure Text Entry की प्रोग्रामेटिक सेटिंग inputType सेट करके या setTransformationMethod() के माध्यम से की जाती है। दोनों दृष्टिकोण एक ही परिणाम की ओर ले जाते हैं लेकिन विवरण में भिन्न होते हैं। inputType सेट करना अतिरिक्त रूप से ऑटोकरेक्ट और सुझावों को कॉन्फ़िगर करता है, जबकि setTransformationMethod केवल कैरेक्टर प्रदर्शन को प्रभावित करता है।
// Programmatic password visibility toggle
fun togglePasswordVisibility(til: TextInputLayout) {
val editText = til.editText ?: return
val currentType = editText.inputType
val isPassword = (currentType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
if (isPassword) {
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
} else {
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
}
// Restore cursor position
val cursorPos = editText.selectionStart
editText.setSelection(maxOf(0, cursorPos))
}
// Custom masking — shows only last 4 chars
class PartialPasswordTransformation : TransformationMethod {
override fun getTransformation(source: CharSequence?,
view: View?): CharSequence {
val text = source?.toString() ?: ""
if (text.length <= 4) return text
val dots = "\u2022".repeat(text.length - 4)
return dots + text.substring(text.length - 4)
}
override fun onFocusChanged(view: View?,
sourceText: CharSequence?,
focused: Boolean,
direction: Int,
previouslyFocusedRect: android.graphics.Rect?) {}
}
Secure Text Entry कई स्तरों पर सुरक्षा प्रदान करता है। विज़ुअल मास्किंग कंधे पर झांककर (shoulder surfing) पासवर्ड पढ़ने से रोकता है — सार्वजनिक स्थानों पर पासवर्ड चोरी का सबसे आम तरीका। ऑटोकरेक्ट को अक्षम करना पासवर्ड को उपयोगकर्ता के शब्दकोश में सहेजे जाने से रोकता है, जिससे पूर्वानुमानित इनपुट के माध्यम से लीकेज समाप्त हो जाता है। स्क्रीनशॉट से सुरक्षा (यदि FLAG_SECURE सक्षम है) अन्य अनुप्रयोगों को फ़ील्ड की सामग्री कैप्चर करने से रोकती है।
हालांकि, Secure Text Entry पूर्ण सुरक्षा नहीं है। सिस्टम स्तर पर इनपुट इंटरसेप्शन (कीलॉगिंग) के माध्यम से हमले InputConnection से वास्तविक कैरेक्टर प्राप्त कर सकते हैं। एक्सेसिबिलिटी सेवा वाले दुर्भावनापूर्ण अनुप्रयोग EditText सामग्री पढ़ सकते हैं, भले ही कैरेक्टर स्क्रीन पर छिपे हों। साथ ही, सर्वर पर डेटा ट्रांसमिशन के दौरान SSL स्निफिंग पासवर्ड को उजागर कर सकता है यदि उचित प्रमाणपत्र सत्यापन के साथ HTTPS का उपयोग नहीं किया जाता है।
OWASP Mobile Security Testing Guide (2025) के अनुसार, Android में अधिकतम पासवर्ड सुरक्षा के लिए अनुशंसित है: महत्वपूर्ण फ़ील्ड के लिए inputType="textPassword" + autofill अक्षम करें; पासवर्ड को आवश्यकता से अधिक समय तक मेमोरी में कैश न करें; एप्लिकेशन को छोटा करने पर पासवर्ड फ़ील्ड साफ़ करें (onPause/onStop); पासवर्ड के संक्षिप्त प्रदर्शन के दौरान भी मास्किंग का उपयोग करें।
| सुरक्षा स्तर | Secure Text Entry | अतिरिक्त उपाय |
|---|---|---|
| विज़ुअल इंटरसेप्शन | कैरेक्टर मास्किंग | बायोमेट्रिक प्रमाणीकरण, shoulder surfing से बचें |
| स्क्रीनशॉट | आंशिक (कार्यान्वयन पर निर्भर) | Window पर FLAG_SECURE |
| कीलॉगिंग | सुरक्षा नहीं करता | सुरक्षित इनपुट के साथ IME का उपयोग करें |
| ऑटोकरेक्ट/शब्दकोश | अक्षम | पासवर्ड के लिए डिफ़ॉल्ट रूप से अक्षम |
| नेटवर्क इंटरसेप्शन | सुरक्षा नहीं करता | प्रमाणपत्र पिनिंग के साथ HTTPS |
Android डेवलपर्स को छिपे हुए इनपुट के साथ काम करते समय कई मुख्य अभ्यासों का पालन करना चाहिए। पहला, पासवर्ड फ़ील्ड के लिए हमेशा endIconMode="password_toggle" के साथ TextInputLayout का उपयोग करें — यह आधुनिक Material Design मानक है। दूसरा, पासवर्ड दिखाने की क्षमता को अक्षम न करें — उपयोगकर्ता को यह सत्यापित करने में सक्षम होना चाहिए कि उन्होंने क्या दर्ज किया, विशेष रूप से छोटे कीबोर्ड वाले मोबाइल उपकरणों पर।
Secure Text Entry को उचित ऑटोफिल कॉन्फ़िगरेशन की भी आवश्यकता होती है। पासवर्ड फ़ील्ड के लिए, हमेशा autofillHints="password" या autofillHints="newPassword" निर्दिष्ट करें ताकि पासवर्ड प्रबंधक सही ढंग से डेटा भर और सहेज सकें। नए पासवर्ड पुष्टिकरण फ़ील्ड के लिए, autofillHints="newPassword" का उपयोग करें ताकि सिस्टम इसे वर्तमान सहेजे गए पासवर्ड से भरने का सुझाव न दे।
// Full password field with autofill and cleanup
class SecurePasswordField {
private fun setupPasswordField(til: TextInputLayout) {
val editText = til.editText ?: return
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
editText.setAutofillHints(View.AUTOFILL_HINT_PASSWORD>)
editText.importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_YES
}
fun clearOnPause(editText: EditText) {
editText.text?.clear()
}
}
अक्सर पूछे जाने वाले प्रश्न
textPassword सभी दर्ज किए गए कैरेक्टर को छिपाता है और ऑटोकरेक्ट को अक्षम करता है। textVisiblePassword भी ऑटोकरेक्ट को अक्षम करता है लेकिन कैरेक्टर को स्पष्ट रूप से दिखाता है। textVisiblePassword का उपयोग पासवर्ड दृश्यता टॉगल करते समय किया जाता है — यह सामान्य टेक्स्ट नहीं है, क्योंकि सुरक्षा के लिए ऑटोकरेक्ट और सुझाव अक्षम रहते हैं।
हाँ, TransformationMethod इंटरफ़ेस को लागू करने वाली एक कस्टम क्लास बनाएँ। getTransformation() विधि को ओवरराइड करें जो वांछित रिप्लेसमेंट कैरेक्टर के साथ एक CharSequence लौटाती है। इसे editText.transformationMethod = CustomPasswordTransformation() के माध्यम से सेट करें। याद रखें कि सुरक्षा के लिए कैरेक्टर मोनोस्पेस्ड होना चाहिए।
छोटी स्क्रीन और टच कीबोर्ड वाले मोबाइल उपकरणों पर, पासवर्ड दर्ज करते समय त्रुटि की संभावना डेस्कटॉप की तुलना में काफी अधिक होती है। दर्ज किए गए पासवर्ड को सत्यापित करने की क्षमता इनपुट त्रुटियों को कम करती है और पासवर्ड रीसेट अनुरोधों की संख्या घटाती है, जिससे उपयोगकर्ता अनुभव बेहतर होता है और सहायता भार कम होता है।
Activity या Dialog विंडो पर FLAG_SECURE फ़्लैग सेट करें: window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)। यह पूरी विंडो के लिए स्क्रीनशॉट और स्क्रीन रिकॉर्डिंग को रोकता है। हालांकि, ध्यान दें कि यह सामान्य सामग्री के लिए भी स्क्रीनशॉट अक्षम कर देगा, जो अवांछनीय हो सकता है।
Android 8.0 (API 26) से शुरू होकर, Autofill Framework स्वचालित रूप से inputType द्वारा पासवर्ड फ़ील्ड का पता लगाता है। सही संचालन के लिए, importantForAutofill="yes" सेट करें और autofillHints ("password", "newPassword", "emailAddress") निर्दिष्ट करें। Gboard और पासवर्ड प्रबंधक सहेजे गए पासवर्ड सुझाने के लिए इन विशेषताओं का उपयोग करते हैं।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें