Скрыть пароль звездочками python

Как использовать getpass(), чтобы скрыть пароль пользователя при его вводе

Я пытаюсь сделать небольшую программу, которая проверяет надежность пароля пользователя. Когда пользователю предлагается ввести свой пароль, я хочу, чтобы ввод отображался в виде звездочек или точек вместо ввода текста. Есть ли способ скрыть этот ввод. Я использовал getpass, чтобы попытаться скрыть ввод без успеха.

 from getpass import getpass passwd = getpass('Please enter your password') 

Предупреждение (из модуля предупреждений): Файл «C:\Program Files (x86)\Python36-32\lib\getpass.py», строка 100 возвращает fallback_getpass (приглашение, поток) GetPassWarning: невозможно управлять эхом на терминале. Предупреждение: ввод пароля может быть отражен. Пожалуйста, введите ваш пароль: this_is_my_password

Пароль вводится в строке, но вместо звездочек выводятся исходные символы. Поскольку программа будет проверять надежность пароля, мне нужно что-то, что сохраняет пароль не в виде звездочек, а в виде его исходных символов. Кроме того, есть ли способ включить способ отображения пароля пользователя, если он выполняет действие. Я рассматривал возможность использования кнопки, но это область Python, в которой я не уверен, поэтому могу ли я программировать по-другому с определенной клавишей. Код Sudo для проекта.

userPass = hidden(input("Please enter your password ")) if showPassword selected: show the password else: move on with the rest of the program 

Это не ошибка, это предупреждение. Одно из отличий состоит в том, что предупреждения носят информационный, но не разрушительный характер; программа не прекращает работу после предупреждения. Похоже, то, что у вас есть, все еще может работать; продолжай тыкать в него. — person Eric Ed Lohmar &nbsp schedule 08.11.2017

В какой среде вы запускаете эту программу? Что бы это ни было, в нем отсутствует какая-то функция, которую getpass() использует, чтобы скрыть эхо символов. Если вы запускаете код из какой-либо IDE, попробуйте вместо этого запустить его непосредственно из командной строки. — person jasonharper &nbsp schedule 08.11.2017

Я могу настроить функцию ввода с помощью модулей pyHook, pythoncom, sys и pysignal, вам это нравится или нет? — person DRPK &nbsp schedule 08.11.2017

@jasonharper У меня все те же проблемы. Я запускаю это в 3.6.2 IDE. Я попытался запустить его в оболочке, и появляются те же предупреждающие сообщения. — person Jake Symons &nbsp schedule 08.11.2017

Ответы (2)

Предупреждение в основном означает, что вы запускаете свою программу в среде, где Python не может использовать обычные интерактивные вызовы IOCTL для реализации функций только со звездочками. Запуск программы из вашей IDE в основном приводит к тому, что IDE запускает программу в псевдотерминале. Вместо этого попробуйте запустить его в командной строке.

Читайте также:  Php and css linking

Модуль getpass содержит функцию getpass , которая работает точно так же, как input() , за исключением того, что она отключает эхо терминала. Результатом является введенный пароль, который вы можете использовать для определения его надежности или распечатать по мере необходимости, но пока пользователь вводит свой пароль, ничего не печатается, кроме подсказки.

>>> from getpass import getpass >>> passwd = getpass('Please enter your password') Please enter your password >>> print passwd This is my password 

Я пытался использовать этот код, но получил сообщение об ошибке (см. отредактированный пост выше) — person Jake Symons; 08.11.2017

Источник

Маскировка ввода пользователя в python звездочками

Я пытаюсь замаскировать то, что пользователь вводит в IDLE со звездочками, поэтому люди вокруг них не могут видеть, что они набрали/набрали. Я использую основной исходный ввод для сбора того, что они набирают.

Вам нужно будет выполнить какое-то пользовательское перенаправление stdout, чтобы маскировать его звездочками, но есть более простой способ получить пароли stackoverflow.com/a/1761753/1268926

4 ответа

В зависимости от ОС, как вы получаете один символ от пользовательского ввода и как проверить возврат каретки, будет отличаться.

В OSX, например, вы можете сделать что-то вроде этого:

import sys, tty, termios def getch(): fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: tty.setraw(sys.stdin.fileno()) ch = sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return ch key = "" sys.stdout.write('Password :: ') while True: ch = getch() if ch == '\r': break key += ch sys.stdout.write('*') print print key 

Если вам нужно решение, которое работает в Windows/macOS/Linux и Python 2 и 3, вы можете установить модуль stdiomask :

В отличие от getpass.getpass() (который находится в стандартной библиотеке Python), модуль stdiomask может отображать символы *** маски при stdiomask .

>>> stdiomask.getpass() Password: ********* 'swordfish' >>> stdiomask.getpass(mask='X') # Change the mask character. Password: XXXXXXXXX 'swordfish' >>> stdiomask.getpass(prompt='PW: ', mask='*') # Change the prompt. PW: ********* 'swordfish' >>> stdiomask.getpass(mask='') # Don't display anything. Password: 'swordfish' 

Чтобы решить эту проблему, я написал этот небольшой модуль pyssword, чтобы замаскировать пароль ввода пользователя в командной строке. Он работает с окнами. Код ниже:

from msvcrt import getch import getpass, sys def pyssword(prompt='Password: '): ''' Prompt for a password and masks the input. Returns: the value entered by the user. ''' if sys.stdin is not sys.__stdin__: pwd = getpass.getpass(prompt) return pwd else: pwd = "" sys.stdout.write(prompt) sys.stdout.flush() while True: key = ord(getch()) if key == 13: #Return Key sys.stdout.write('\n') return pwd break if key == 8: #Backspace key if len(pwd) > 0: # Erases previous character. sys.stdout.write('\b' + ' ' + '\b') sys.stdout.flush() pwd = pwd[:-1] else: # Masks user input. char = chr(key) sys.stdout.write('*') sys.stdout.flush() pwd = pwd + char 

Отказ от ответственности: не предоставляет звездочку в терминале, но это делает в ноутбуке jupyter.

Читайте также:  Тип данных short java

Приведенный ниже код обеспечивает замену письменных символов звездочкой и позволяет удалять неправильно введенные символы. Количество звездочек отражает количество набранных символов.

import getpass key = getpass.getpass('Password :: ') 

Изображение 160638

И после того, как пользователь нажмет ввод:

Изображение 160639

Хотя ваш фрагмент кода может решить проблему, вы должны описать, какова цель вашего кода (как он решает проблему). Кроме того, вы можете проверить stackoverflow.com/help/how-to-answer

Ещё вопросы

  • 1 Как выполнить итерацию для большего списка, используя foreach
  • 1 Алгоритм самой длинной палиндромной последовательности, анализ времени
  • 0 Как научить PHPStorm вашей собственной структуре?
  • 0 как обновить статус комнаты после вставки с помощью php
  • 0 javascript / jquery получить значение переменной [дубликата]
  • 1 Использование конкретных номеров для достижения целевого числа
  • 0 Используйте Intel OpenCL.dll вместе с установкой NVIDA CUDA
  • 0 ng-options & ng-repeat: почему угловая модель не привязана?
  • 1 Должны ли похожие тестовые случаи jUnit находиться в одном тесте?
  • 0 Сделайте флажки отмеченными, оставаясь отмеченными после возвращения на страницу
  • 1 Использование экземпляра одноэлементного класса в качестве переменной уровня класса приемлемо?
  • 0 document.write очень медленно, за исключением Firefox
  • 1 Как передать идентификатор cron как arg в методе, который вызывает cron
  • 0 Скрыть блоки, которые не соответствуют контейнеру фиксированного размера
  • 0 Как добавить функцию удаленной загрузки в веб-приложение с Instagram-подобными фильтрами, чтобы разрешить обмен на Facebook?
  • 0 Yii визуализировать страницу с HTML идентификатором
  • 1 ASP.Net MVC длительный процесс
  • 0 Конфигурация SilverStripe Tinymce не обновляется внутри модуля
  • 0 как отправить JSON также из PHP API
  • 1 Заголовок fetch () отображается как application / x-www-form-urlencoded вместо application / json
  • 0 Проход через дерево DOM
  • 1 Как протестировать веб-сервис с Linq
  • 1 Как Pythonic устанавливает в классе статический словарь, который можно изменять во время выполнения?
  • 1 SLF4J: Не удалось загрузить класс «org.slf4j.impl.StaticLoggerBinder», API
  • 1 Как объединить неравномерный 2-мерный массив в 1-й массив (Java)
  • 1 Считайте подпапку входящих сообщений с помощью exchangelib
  • 1 Как применить Interceptor в python?
  • 0 Href vs select box
  • 0 вопрос кнопки возврата в Chrome
  • 0 Как получить роль пользователя с помощью Zend framework2?
  • 1 Как вы передаете обнуляемый список объектов с Parcelable
  • 1 используя python concurrent.futures представьте с нумерацией процессов
  • 1 SQL-запрос возвращает данные, но ResultSet пуст
  • 0 Постоянный фон веб-страницы в CSS
  • 0 Проблемы тайм-аута сеанса с PHP MySQL
  • 0 СБОЙ: ParseException строка 1:94 не соответствует вводу ‘hdfs’, ожидая StringLiteral рядом с ‘location’ в расположении раздела
  • 0 Проблема с функцией jQuery .click
  • 0 Как я могу инициализировать эту структуру?
  • 0 Создание базового массива объектов JavaScript
  • 1 Entity Framework с динамическим Linq
  • 1 Редактирование текстового средства просмотра текста для всех редактируемых текстов в просмотре списка
  • 1 .Net Portable Class Library и Microsoft.WindowsAzure.Mobile.Service.EntityData
  • 1 Ошибка Play Console 403 после принятия приглашения
  • 0 Проблема с ионной прокруткой — прокрутка страницы прерывается при использовании ионной прокрутки
  • 0 Приведение / разыменование указателей на символы в двойной массив
  • 0 Удаление определенного эффекта jquery
  • 0 как разбирать в каком то улье?
  • 0 Выходной каталог MSBuild CL Task
  • 1 Почему в следующих журналах регистрируются разные значения (цикл массива)?
  • 0 C ++ лучший способ хранить массивы или векторы объектов на диске для простой базы данных
Читайте также:  Python fill array with zero

Источник

Как создать поле ввода пароля с помощью Tkinter

Я пытаюсь закодировать окно входа в систему с помощью Tkinter, но я не могу скрыть текст пароля в формате звездочки. Это означает, что ввод пароля — это простой текст, которого следует избегать. Любая идея, как это сделать?

4 ответа

widget = Entry(parent, show="*", width=15) 

где widget — текстовое поле, parent — родительский виджет (окно, кадр, что угодно), show — символ для эха (это символ, показанный в Entry ) и width — ширина виджета.

Это полезно, насколько это возможно. Хотя ОП не упомянул об этом, можете ли вы сказать, запрещает ли show=’*’ также копировать / вставлять?

Я могу говорить об этом на Mac с использованием Python 3.7, во всяком случае: копирование только копирует *, поэтому безопасность кажется достаточной для большинства целей.

Знаете, это было давно, поэтому я даже не уверен, что это было для Python 3, когда я писал этот ответ. Я предполагаю, что это зависит от того, как операционная система отображает поля паролей, если они есть изначально.

Если вы не хотите создавать новый виджет Entry, вы можете сделать это:

Чтобы снова вернуться к нормальной работе, сделайте следующее:

Я обнаружил это, изучив предыдущий ответ и используя вспомогательную функцию в интерпретаторе Python (например, help (tkinter.Entry) после импорта (от сканирования документации там). Я признаю, что я просто догадался, как сделать это нормально снова.

widget-name = Entry(parent,show="*") 

Вы также можете использовать символ пули:

bullet = "\u2022" #specifies bullet character widget-name = Entry(parent,show=bullet)#shows the character bullet 

Если вы используете Python 3.x, вы можете просто ввести символ маркера вместо кода Unicode. Однако убедитесь, что ваш файл имеет кодировку UTF-8. @CaptainFantastic В Linux вы можете иногда вводить символы Юникода, нажимая Ctrl + shift + m, а затем вводя код. Либо скопируйте из карты символов, либо используйте последовательность клавиш составления.

Здесь небольшое, чрезвычайно простое демонстрационное приложение скрывает и извлекает пароль с помощью Tkinter.

#Python 3.4 (For 2.7 change tkinter to Tkinter) from tkinter import * def show(): p = password.get() #get password from entry print(p) app = Tk() password = StringVar() #Password variable passEntry = Entry(app, textvariable=password, show='*').pack() submit = Button(app, text='Show Console',command=show).pack() app.mainloop() 

Источник

Оцените статью