পাইথনে কমান্ড-লাইন পাসওয়ার্ড ইনপুট পাওয়া


234

আপনি কি জানেন যে লিনাক্সে আপনি যখন কিছু সুডোর জিনিস চেষ্টা করেন তখন এটি আপনাকে পাসওয়ার্ডটি প্রবেশ করিয়ে দেওয়ার কথা বলে এবং টাইপ করার সাথে সাথে টার্মিনাল উইন্ডোতে কিছুই দেখানো হয় না (পাসওয়ার্ডটি প্রদর্শিত হয় না)?

পাইথনে এটি করার কোনও উপায় আছে? আমি এমন একটি স্ক্রিপ্টে কাজ করছি যার জন্য এত সংবেদনশীল তথ্য প্রয়োজন এবং আমি এটি টাইপ করার সময় এটি লুকিয়ে রাখতে চাই।

অন্য কথায়, আমি পাসওয়ার্ডটি না দেখিয়ে ব্যবহারকারীর কাছ থেকে পাসওয়ার্ড পেতে চাই।

উত্তর:


298

ব্যবহার getpass.getpass():

from getpass import getpass
password = getpass()

একটি alচ্ছিক প্রম্পট প্যারামিটার হিসাবে পাস করা যেতে পারে; ডিফল্ট হয় "Password: "

নোট করুন যে এই ফাংশনটির জন্য উপযুক্ত টার্মিনাল প্রয়োজন, তাই এটি টাইপ করা অক্ষরের প্রতিধ্বনি বন্ধ করতে পারে - আইডিএল থেকে চলার সময় আরও তথ্যের জন্য "গেটপাস ওয়ার্নিং: টার্মিনালের প্রতিধ্বনি নিয়ন্ত্রণ করতে পারে না" দেখুন।


কাজ করবে, তবে কীভাবে কেউ একজন "হ্যাকার" সম্পর্কে সতর্ক থাকতে পারে যা স্ক্রিপ্টটির অনুলিপি তৈরি করে এবং তারপরে ব্যবহারকারী পাসওয়ার্ডের প্রয়োজনীয় লাইনটি মন্তব্য করবে?
asf107

129
@ asf107: হ্যাকার যদি সোর্স কোডটি সম্পাদনা করতে পারে তবে চিন্তার অন্যান্য সমস্যা আছে।
ডিএসএম

12
@ asf107 - পাসওয়ার্ডের অনুরোধ করার পিছনে ধারণাটি যাতে আপনি এটির সাথে কোনও কিছুর প্রমাণীকরণ করতে পারেন (IE, আমি একটি অনলাইন সার্ভারের সাথে প্রমাণীকরণের জন্য পাসওয়ার্ডের অনুরোধ করতে এটি ব্যবহার করছি)। যদি কোনও হ্যাকার লাইনটি সম্পর্কে মন্তব্য করে তবে প্রোগ্রামটি কেবল ব্যর্থ হবে কারণ সার্ভারটির সাথে আর প্রমাণীকরণ হবে না। ব্যবহারের পিছনে ধারণাটি getpass()যাতে কেউ সোর্স কোডটি দেখতে না পারে এবং কেবল এটি পড়ে আপনার পাসওয়ার্ডটি খুঁজে না পায় এবং আপনি যখন টাইপ করেন তখন কেবল আপনার কাঁধে দুলিয়ে এবং আপনার পাসওয়ার্ডটি পর্দার বাইরে পড়ে আপনার পাসওয়ার্ড পেতে পারে না
আর্টঅফ ওয়ারফেয়ার

158
import getpass

pswd = getpass.getpass('Password:')

গেটপাস লিনাক্স, উইন্ডোজ এবং ম্যাকে কাজ করে।


11
"পাসওয়ার্ড:" (কোলনের পরে কোনও স্থান সহ) হ'ল ডিফল্ট প্রম্পট, তাই প্রায়শই এটি getpass.getpass () এ কল করার প্রয়োজন নেই।
জেএল

গেটপাস একটি স্ট্যান্ডার্ড লাইব্রেরি মডিউল যা কমপক্ষে পাইথন 2.5 থেকে শুরু হয়েছে
জোকাসিড

1
এটি আমাকে Warning (from warnings module): File "C:\Python27\lib\getpass.py", line 92 return fallback_getpass(prompt, stream) GetPassWarning: Can not control echo on the terminal. Warning: Password input may be echoed.
আইডলিতে

getpass () IDLE নিয়ে কাজ করে না। গেটপাস () না করে এ অর্জনের অন্য কোনও উপায় আছে কি?
ব্রেন্ডন

প্রম্পটটি পাওয়ার জন্য স্ট্যাডারে রয়েছে (আপনার এটিরও প্রয়োজন হবে import sys): getpass.getpass(<স্ট্রিং>,sys.stderr)
ফিলিপ কেয়ার্নস

26

এই উদ্দেশ্যে গেটপাস ব্যবহার করুন ।

getpass.getpass - প্রতিধ্বনিত ছাড়াই ব্যবহারকারীকে একটি পাসওয়ার্ডের জন্য অনুরোধ করুন


* চরগুলি প্রতিধ্বনি নিয়ে কীভাবে?
নিখিল ভিজে

12

এই কোডটি প্রতিটি বর্ণের পরিবর্তে একটি নক্ষত্রকে মুদ্রণ করবে।

import sys
import msvcrt

passwor = ''
while True:
    x = msvcrt.getch()
    if x == '\r':
        break
    sys.stdout.write('*')
    passwor +=x

print '\n'+passwor

7
এটি কেবল উইন্ডোজ তবে কমপক্ষে এটি getpassউত্তরটি পুনরাবৃত্তি করছে না । ভাল
জিন-ফ্রানসোয়া ফ্যাব্রে

3
ব্যাকস্পেসগুলি পরিচালনা করবে না।
আইকুট কলিক

আপনার কোডটি পাইথন ২.x এর জন্য কিনা তা আমি নিশ্চিত নই, তবে এটি আমার পক্ষে কার্যকর হয় না। আমি পাইথন 3.x চালাচ্ছি। প্রথম ত্রুটিটি আমি পেয়েছিলাম 'পাসওয়ার + + x' লাইনের জন্য একটি টাইপরর। এটি বলেছিল: "বাইট অবজেক্টকে" স্ট্রিট "এ রূপান্তর করতে পারে না"। আমি লাইনটি পরিবর্তন করেছি যাতে আমি স্পষ্টভাবে x স্ট্রিংয়ের জন্য যেমন: "পাসওয়ার্ড + = স্ট্রিং (এক্স)" কাস্ট করি। কিন্তু কোডটি এখনও কাজ করে না। আমি যখন এটি চালনা করি, এটি আমাকে ইনপুট দেওয়ার জন্য অনুরোধ করে না, এটি চিরকালের জন্য কেবল তারকাচিহ্নটি প্রিন্ট করে।
বৃহত্তর

@ লার্পার এটি পাইথন 2 এর জন্য, কোডের শেষ লাইনটি দেখুন
মিল্কিওয়ে 90

0

15.7। getpass - পোর্টেবল পাসওয়ার্ড ইনপুট

#!/usr/bin/python3
from getpass import getpass
passwd = getpass("password: ")
print(passwd)

আপনি এখানে আরও পড়তে পারেন


13
আপনার উত্তর এবং অন্যদের মধ্যে পার্থক্য কি?
mechnicov

0

@ আহমদ আলআর এর উত্তরে আপডেট হচ্ছে

# import msvcrt
import getch

def getPass():
    passwor = ''
    while True:
        x = getch.getch()
        # x = msvcrt.getch().decode("utf-8")
        if x == '\r' or x == '\n':
            break
        print('*', end='', flush=True)
        passwor +=x
    return passwor

print("\nout=", getPass())

আমাদের শুধুমাত্র উইন্ডোগুলির msvcrt কিন্তু getch PyPI থেকে (আমি শুধুমাত্র লিনাক্স সাথে পরীক্ষিত) উভয়ের জন্য কাজ করা উচিত। আপনি উইন্ডোগুলির জন্য কাজ করতে দুটি লাইন মন্তব্য / অসন্তুষ্ট করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.