Python:控制台输入密码passwod的方法
  ndh0xMjNGcR6 2023年11月13日 33 0



目录

  • input
  • getpass
  • termios
  • msvcrt


input

print(input("please input: "))
$ python3 demo.py 
please input: 123456
123456

缺点:不安全

getpass

import getpass

print(getpass.getpass("please input: "))
$ python3 demo.py 
please input: 
123456

缺点:看不到输入的位数

termios

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

def getpass(maskchar = "*"): 
  password = "" 
  while True: 
    ch = getch() 
    if ch == "\r" or ch == "\n": 
      print 
      return password 
    elif ch == "\b" or ord(ch) == 127: 
      if len(password) > 0: 
        sys.stdout.write("\b \b") 
        password = password[:-1] 
    else: 
      if maskchar != None: 
        sys.stdout.write(maskchar) 
      password += ch 

if __name__ == "__main__": 
  print ("Enter your password:",)
  password = getpass("*") 
  print ("your password is %s" %password)
$ python3 demo.py 
Enter your password:
******
your password is 123456

缺点:该方法仅在Linux上使用

msvcrt

import msvcrt,sys

def pwd_input():    
    chars = []   
    while True:  
        try:  
            newChar = msvcrt.getch().decode(encoding="utf-8")  
        except: 
            return input("你很可能不是在cmd命令行下运行,密码输入将不能隐藏:")  
        if newChar in '\r\n': # 如果是换行,则输入结束               
             break   
        elif newChar == '\b': # 如果是退格,则删除密码末尾一位并且删除一个星号   
             if chars:    
                 del chars[-1]   
                 msvcrt.putch('\b'.encode(encoding='utf-8')) # 光标回退一格  
                 msvcrt.putch( ' '.encode(encoding='utf-8')) # 输出一个空格覆盖原来的星号  
                 msvcrt.putch('\b'.encode(encoding='utf-8')) # 光标回退一格准备接受新的输入                   
        else:  
            chars.append(newChar)  
            msvcrt.putch('*'.encode(encoding='utf-8')) # 显示为星号  
    return (''.join(chars) )  
  
if __name__ == "__main__": 
    print("Please input your password:")
    pwd = pwd_input()  
    print("\nyour password is:{0}".format(pwd))
    sys.exit()

缺点:仅在Windows上使用

参考


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
ndh0xMjNGcR6