首页 > 编程知识 正文

Python输密码五次不正确就退出

时间:2023-11-19 04:38:14 阅读:293519 作者:RHSV

Python编程可以通过调用密码模块实现密码限制功能。该模块提供了如下方法:getpass()用于获取密码输入,getuser()用于获取系统登录用户名,crypt()用于加密字符串。通过使用这些方法,可以实现在Python中输入密码,输入次数达到限制后自动退出。

一、限制密码输入次数

使用Python的while循环获取用户输入密码,并且设置一定次数的输入错误就退出程序的限制。程序使用字符比较大小写敏感,所以应将输入的密码也转换成字符进行比较。

import getpass

password = 'test'
num = 5

while num > 0:
    pwd = getpass.getpass("请输入密码:")
    if pwd == password:
        print("密码正确")
        break
    else:
        print("密码不正确")
        num -= 1
else:
    print("密码输错5次,程序退出")

二、加密密码

加密密码可以防止密码泄露的风险。Python可以使用密码模块中的crypt()方法进行加密。在保存密码时,可以将加密后的密码存储到数据库或者文件中,以防止明文密码被别人窃取。

import crypt

password = 'test'
num = 5

# 加密密码
crypt_password = crypt.crypt(password, crypt.METHOD_SHA512)

while num > 0:
    pwd = getpass.getpass("请输入密码:")
    # 对输入的密码进行加密
    crypt_input = crypt.crypt(pwd, crypt_password)
    if crypt_input == crypt_password:
        print("密码正确")
        break
    else:
        print("密码不正确")
        num -= 1
else:
    print("密码输错5次,程序退出")

三、使用异常处理

使用Python的异常处理可以处理密码输入错误的情况。输入错误时,程序不会崩溃,而是会输出异常信息。这样可以使代码更加健壮。

import crypt

password = 'test'
num = 5

# 加密密码
crypt_password = crypt.crypt(password, crypt.METHOD_SHA512)

while num > 0:
    try:
        pwd = getpass.getpass("请输入密码:")
        # 对输入的密码进行加密
        crypt_input = crypt.crypt(pwd, crypt_password)
        if crypt_input == crypt_password:
            print("密码正确")
            break
        else:
            print("密码不正确")
            num -= 1
            if num == 0:
                raise Exception("密码输错5次,程序退出")
    except Exception as e:
        print(e)
        break

四、使用GUI界面

使用Python的GUI界面,可以让程序更加美观实用。以下代码演示了如何使用tkinter库来实现一个简单的密码输入界面。

import crypt
import tkinter as tk
from tkinter import messagebox

password = 'test'
num = 5

root = tk.Tk()
root.title('密码输入')

# 加密密码
crypt_password = crypt.crypt(password, crypt.METHOD_SHA512)

def check_password():
    global num
    try:
        pwd = passwordEntry.get()
        # 对输入的密码进行加密
        crypt_input = crypt.crypt(pwd, crypt_password)
        if crypt_input == crypt_password:
            messagebox.showinfo("提示", "密码正确")
            root.destroy()
        else:
            messagebox.showwarning("警告", "密码不正确n您还有%d次机会" % num)
            num -= 1
            if num == 0:
                raise Exception("密码输错5次,程序退出")
    except Exception as e:
        messagebox.showerror("错误", e)
        root.destroy()

label = tk.Label(root, text="请输入密码:")
passwordEntry = tk.Entry(root, show="*")

label.pack()
passwordEntry.pack()
passwordEntry.focus_set()

button = tk.Button(root, text="确定", command=check_password)
button.pack()

root.mainloop()

五、使用正则表达式

使用Python的正则表达式可以处理用户输入密码的复杂性。下面的代码演示了如何使用正则表达式来限制密码的长度、字符、数字和特殊符号。

import crypt
import re

password = 'testpassword#123'
num = 5

reg_password = r'^(?=.*[A-Za-z])(?=.*d)(?=.*[@$!%*#?&])[A-Za-zd@$!%*#?&]{8,}$'

# 加密密码
crypt_password = crypt.crypt(password, crypt.METHOD_SHA512)

while num > 0:
    try:
        pwd = getpass.getpass("请输入密码:")
        # 校验密码复杂性
        if not re.match(reg_password, pwd):
            raise Exception("密码需要至少包含一个字母、一个数字和一个特殊字符")
        # 对输入的密码进行加密
        crypt_input = crypt.crypt(pwd, crypt_password)
        if crypt_input == crypt_password:
            print("密码正确")
            break
        else:
            print("密码不正确")
            num -= 1
            if num == 0:
                raise Exception("密码输错5次,程序退出")
    except Exception as e:
        print(e)
        break

六、总结

Python的密码模块提供了丰富的方法,可以让开发者实现密码输入限制、加密等功能。通过本文的介绍,我们了解到了如何限制密码输入次数、加密密码、使用异常处理、使用GUI界面、使用正则表达式,使得Python开发更加丰富多彩。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。