Secure Text Entry — यह क्या है, इनपुट सुरक्षा और Android में पासवर्ड

लेखक: IT Sectr प्रकाशित: 2026-07-07 पढ़ने का समय: 9 मिनट

Secure Text Entry Android में एक टेक्स्ट इनपुट मोड है जिसमें दर्ज किए गए कैरेक्टर वास्तविक कैरेक्टर के बजाय छिपे हुए रूप (डॉट्स या तारांकन) में प्रदर्शित होते हैं। इस मोड का उपयोग पासवर्ड फ़ील्ड, PIN कोड, CVV कोड और अन्य गोपनीय जानकारी के लिए किया जाता है। Secure Text Entry न केवल डेटा को विज़ुअल इंटरसेप्शन से बचाता है, बल्कि स्क्रीनशॉट, स्क्रीन रिकॉर्डिंग और ऑटोकरेक्ट सुविधाओं के माध्यम से लीकेज को भी रोकता है। Android Security Best Practices (2026) के अनुसार, उपयोगकर्ताओं के प्रमाणीकरण डेटा को संसाधित करने वाले अनुप्रयोगों के लिए छिपा हुआ इनपुट एक अनिवार्य आवश्यकता है।

मुख्य बिंदु

  • Secure Text Entry — छिपा हुआ इनपुट मोड जो पासवर्ड दर्ज करते समय कैरेक्टर के बजाय डॉट्स प्रदर्शित करता है।
  • सक्रियण — XML में inputType="textPassword" या कोड में TYPE_TEXT_VARIATION_PASSWORD के माध्यम से।
  • सुरक्षा — विज़ुअल इंटरसेप्शन, स्क्रीनशॉट और ऑटोकरेक्ट/शब्दकोश के माध्यम से लीकेज को रोकता है।
  • TransformationMethod — Android तंत्र जो कैरेक्टर प्रदर्शन को छिपे प्रतीकों से बदलता है।
  • दृश्यता टॉगल — TextInputLayout में endIconMode="password_toggle" के माध्यम से पासवर्ड दिखाने की क्षमता।

Android में Secure Text Entry क्या है

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 क्लास का उपयोग करता है। मास्किंग कैरेक्टर का आकार फ़ील्ड के फ़ॉन्ट आकार से मेल खाता है, जो शब्द की लंबाई के माध्यम से सूचना लीकेज को रोकता है — सभी कैरेक्टर चौड़ाई में समान दिखते हैं। यह दर्ज किए गए डेटा की लंबाई के विश्लेषण पर आधारित हमलों से सुरक्षा के लिए महत्वपूर्ण है।

xml
<!-- 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" />

Secure Text Entry कैसे काम करता है

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 के समान)।

kotlin
// 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) के अनुसार, पासवर्ड दिखाने वाला आइकन हमेशा दिखाई देना चाहिए, न कि केवल जब फ़ील्ड फ़ोकस में हो। उपयोगकर्ता किसी भी समय पासवर्ड सत्यापित करने में सक्षम होना चाहिए। आइकन को एक निश्चित समय के बाद स्वचालित रूप से पासवर्ड नहीं छिपाना चाहिए — केवल उपयोगकर्ता की कार्रवाई पर।

xml
<!-- 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>

Secure Text Entry की प्रोग्रामेटिक कॉन्फ़िगरेशन

Kotlin में Secure Text Entry की प्रोग्रामेटिक सेटिंग inputType सेट करके या setTransformationMethod() के माध्यम से की जाती है। दोनों दृष्टिकोण एक ही परिणाम की ओर ले जाते हैं लेकिन विवरण में भिन्न होते हैं। inputType सेट करना अतिरिक्त रूप से ऑटोकरेक्ट और सुझावों को कॉन्फ़िगर करता है, जबकि setTransformationMethod केवल कैरेक्टर प्रदर्शन को प्रभावित करता है।

TextInputLayout के माध्यम से पासवर्ड टॉगल उदाहरण

kotlin
// 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))
}

कस्टम TransformationMethod

kotlin
// 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

Secure Text Entry के सर्वोत्तम अभ्यास

Android डेवलपर्स को छिपे हुए इनपुट के साथ काम करते समय कई मुख्य अभ्यासों का पालन करना चाहिए। पहला, पासवर्ड फ़ील्ड के लिए हमेशा endIconMode="password_toggle" के साथ TextInputLayout का उपयोग करें — यह आधुनिक Material Design मानक है। दूसरा, पासवर्ड दिखाने की क्षमता को अक्षम न करें — उपयोगकर्ता को यह सत्यापित करने में सक्षम होना चाहिए कि उन्होंने क्या दर्ज किया, विशेष रूप से छोटे कीबोर्ड वाले मोबाइल उपकरणों पर।

Secure Text Entry को उचित ऑटोफिल कॉन्फ़िगरेशन की भी आवश्यकता होती है। पासवर्ड फ़ील्ड के लिए, हमेशा autofillHints="password" या autofillHints="newPassword" निर्दिष्ट करें ताकि पासवर्ड प्रबंधक सही ढंग से डेटा भर और सहेज सकें। नए पासवर्ड पुष्टिकरण फ़ील्ड के लिए, autofillHints="newPassword" का उपयोग करें ताकि सिस्टम इसे वर्तमान सहेजे गए पासवर्ड से भरने का सुझाव न दे।

  • TextInputLayout — दृश्यता टॉगल के लिए endIconMode के साथ Material Design TextInputLayout का उपयोग करें।
  • Autofill — प्रबंधक समर्थन के लिए autofillHints="password" और importantForAutofill="yes" जोड़ें।
  • सफ़ाई — एप्लिकेशन को छोटा करने पर पासवर्ड फ़ील्ड साफ़ करें (onPause/onStop)।
  • लंबाई — पासवर्ड की लंबाई बहुत सख्ती से सीमित न करें (न्यूनतम 8 कैरेक्टर, कोई कठोर अधिकतम नहीं)।
  • बायोमेट्रिक्स — मैन्युअल पासवर्ड दर्ज करने के विकल्प के रूप में बायोमेट्रिक लॉगिन (BiometricPrompt) प्रदान करें।
kotlin
// 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 में क्या अंतर है?

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 और पासवर्ड प्रबंधक सहेजे गए पासवर्ड सुझाने के लिए इन विशेषताओं का उपयोग करते हैं।

सारांश

  • Secure Text Entry — छिपा हुआ इनपुट मोड जो PasswordTransformationMethod के माध्यम से कैरेक्टर को मास्किंग प्रतीकों (डॉट्स) से बदलता है।
  • सक्रियण — inputType="textPassword" या TYPE_TEXT_VARIATION_PASSWORD की प्रोग्रामेटिक सेटिंग के माध्यम से।
  • PasswordTransformationMethod — अंतर्निहित Android क्लास जो Editable को संशोधित किए बिना कैरेक्टर प्रदर्शन बदलता है।
  • दृश्यता टॉगल — endIconMode="password_toggle" और TYPE_TEXT_VARIATION_VISIBLE_PASSWORD के साथ TextInputLayout के माध्यम से कार्यान्वित।
  • सुरक्षा — shoulder surfing, स्क्रीनशॉट (FLAG_SECURE के साथ), ऑटोकरेक्ट और शब्दकोश भंडारण को रोकता है।
  • Autofill — पासवर्ड प्रबंधक समर्थन के लिए, importantForAutofill और autofillHints="password" जोड़ें।
  • सर्वोत्तम अभ्यास — TextInputLayout का उपयोग करें, छोटा करने पर फ़ील्ड साफ़ करें, पासवर्ड की लंबाई सख्ती से सीमित न करें।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें