Python中的密码验证

Python中的密码验证,python,Python,我的问题是设计一个Python脚本,要求用户输入密码,并让Python验证密码是否适合条件 以下是用户输入密码的条件: 以字母开头 至少6个字符 密码中只允许有字母、数字、-和uu 如果条件匹配,则输出Yes。否则,就没有了 以下是我尝试过的: from sys import exit def check_alpha(input): alphas = 0 alpha_list = "A B C D E F G H I J K L M N I O P Q R S T U V W X

我的问题是设计一个Python脚本,要求用户输入密码,并让Python验证密码是否适合条件

以下是用户输入密码的条件:

  • 以字母开头
  • 至少6个字符
  • 密码中只允许有字母、数字、-和uu
  • 如果条件匹配,则输出Yes。否则,就没有了

    以下是我尝试过的:

    from sys import exit
    
    def check_alpha(input):
       alphas = 0
       alpha_list = "A B C D E F G H I J K L M N I O P Q R S T U V W X Y Z".split()
       for char in input:
        if char in alpha_list:
            alphas += 1
    if alphas > 0:
        return True
    else:
        return False
    
    def check_number(input):
    numbers = 0
    number_list = "1 2 3 4 5 6 7 8 9 0".split()
    for char in input:
        if char in number_list:
            numbers += 1
        if numbers > 0:
            return True
        else:
            return False
    
    def check_special(input):
    specials = 0
    special_list = "_-"
    for char in input:
        if char in special_list:
            specials += 1
        if specials > 0:
            return True
        else:
            return False
    
    def check_len(input):
        if len(input) >= 6:
            return True
        else:
            return False
    
    def validate_password(input):
    check_dict ={
        'alpha':check_alpha(input),
        'number':check_number(input),
        'special':check_special(input),
        'len':check_len(input)
    
    }
        if check_alpha(input) & check_number(input) & check_sprcial(input) & check_len(input)
        return True
    else:
        print"No"
    
        while True:
        password = raw_input("Enter password:")
        print
        if validate_password(password):
            print("Yes")
        else
            print("No")
    
    或者:

    import re
    
    while True:
        user_input = input("Please enter password:")
        is_valid = False
    
        if(len(user_input)<6):
            print("No")
            continue
        elif not re.search("[a-z]",user_input):
            print("No")
            continue
        elif not re.search("[0-9]",user_input):
            print("No")
            continue
        elif re.search("[~!@#$%^&*`+=|\;:><,.?/]",user_input):
            print("No")
            continue
        else:
            is_valid = True
            break
    
        if(is_valid):
        print("Yes")
    
    重新导入
    尽管如此:
    用户输入=输入(“请输入密码:”)
    _有效=错误吗
    
    if(len(user_input)我建议您查看一下
    getpass
    模块。为了帮助您入门,请查看以下链接:

    正则表达式是解决问题的理想方法。请尝试在前端验证它。 类似javascript的东西

    关于您的知识,请查看Python文档中的以下链接。
    我喜欢这个特殊的解决方案,因为我发现验证是装饰器的一个很好的用途

    def require(pred):
        def wrapper(f):
            def wrapped(*args, **kwargs):
                while True:
                    result = f(*args, **kwargs)
                    ok = pred(result)
                    if ok:
                        return result
            return wrapped
        return wrapper
    
    def begin_with_letters(s):
        return s[0].isalpha()
    
    def length_over_six(s):
        return len(s) >= 6
    
    def no_letters_outside_of_whitelist(s):
        WHITELIST = set(string.ascii_letters + string.digits + '-_')
        return all(c in WHITELIST for c in s)
    
    @require(begin_with_letters)
    @require(length_over_six)
    @require(no_letters_outside_of_whitelist)
    def get_password():
        user_pass = input("Enter a password: ")
        return user_pass
    
    可以通过构建
    验证程序
    类来扩展此体系结构

    class Validator(abc.ABC):
        errormsg = NotImplemented
    
        def __init__(self, value):
            self.__value = value
    
        @property
        def value(self):
            return self.__value
    
        @abc.abstractmethod
        def validate(self) -> bool:
            """Uses self.value and validates it in some way, returning a bool."""
    
        @staticmethod
        def require(validator)
            def wrapper(f):
                def wrapped(*args, **kwargs):
                    while True:
                        result = f(*args, **kwargs)
                        v = validator(result)
                        ok = v.validate()
                        if ok:
                            return result
                        print(v.errormsg)
                return wrapped
            return wrapper
    
    class BeginWithLetters(Validator):
        errormsg = "Your password must begin with letters."
    
        def validate(self):
            return self.value[0].isalpha()
    
    class LengthOverSix(Validator):
        errormsg = "Your password must be six characters or longer."
    
        def validate(self):
            return len(self.value) >= 6
    
    class WhiteListCharacters(Validator):
        WHITELIST = set(string.ascii_letters + string.digits + "-_")
        errormsg = "Your password must only contain letters, digits, - and _"
    
        def validate(self):
            return all(c in self.WHITELIST for c in self.value)
    
    @Validator.require(BeginWithLetters)
    @Validator.require(LengthOverSix)
    @Validator.require(WhiteListCharacters)
    def get_password():
        return input("Enter a password: ")
    
    试试这个:

    import re
    
    pw = raw_input('Type a password: ') # get input from user
    
    if any([not pw[0].isalpha(),            # check if first char is a letter
           len(pw) < 6,                     # check if len is greater than or equal to 6
           not re.match(r'^[\w-]*$', pw)]): # check if all chars are alphanumeric, underscores, or dashes
        print 'No'
    else:
        print 'Yes'
    

    您可以在一行中加入这三个条件,并避免变量
    无效。
    。您还遗漏了第一个字符的条件:

    import re
    user_input = raw_input('Please enter password:')
    if len(user_input)>=6 and user_input[0].isalpha() and re.match(r"^[\w-]*$", user_input):
        print('Yes')
    else:
        print('No')
    
    重新导入
    def验证(密码):
    如果len(password)<6或re.search(“^[A-Za-z][A-Za-z0-9-\]*$”,password)为无:
    打印(“不接受密码”)
    其他:
    打印(“您的密码似乎很好”)
    
    重新导入
    密码=(输入(“在此处输入密码:”)
    标志=0
    尽管如此:
    
    如果(len(密码)你应该开始展示你的尝试,这样我们可以帮助你提高技能,而不是做作业:)那么,作业应该包含三件事:1)让用户输入密码,2)根据条件验证密码,3)打印结果。你被哪一部分困住了?我们不反对帮你做家庭作业,如果你真的被困住了。我们确实反对“为我做家庭作业”,这就是这个问题似乎要问的。@Hann,你试过post了吗?是的,我当然很抱歉:)
    getpass
    是获取输入而不在命令行上显示,但它对于OP的用例来说似乎毫无用处。这是家庭作业,我猜他们在验证部分遇到了很多问题,没有得到输入(这很容易)。这个答案根本没有实质内容。“类似javascript的东西?”这是什么意思?为什么我们认为这是在浏览器中运行的?你会如何使用正则表达式来解决这个问题?为什么不把整个东西都放在正则表达式中呢<代码>如果重新匹配(r“[A-Za-z][A-Za-z0-9-{5,}$”,密码)为无:
    regex代表
    正则表达式
    ,并使用库
    re
    处理字符串、字符等(请参阅)<代码>验证
    是由user@Hann很高兴知道,也很乐意帮忙。你能把这个答案标记为已接受,这样对其他人也有好处吗?值得一提的是,这不是一个糟糕的解决方案,但对于家庭作业来说,它肯定是过度设计的(因此它的长度是50行而不是6行)。有时,将解决方案过度设计为简单的解决方案是很有趣的,这样就可以在企业级使用它(考虑到用这种体系结构构建新的验证器和验证新功能非常简单和直接!),但我不建议你将此交给你的教授,或者甚至尽最大努力去理解我在这里写的代码。非常感谢!这是一个令人惊讶的答案:我原以为条件不能加入,但现在我明白了:D谢谢!不客气:)别忘了接受你认为最有用的答案,谢谢!看完你的建议后,我发现我已经同意了这个问题,你的建议很简单很好!
    import re
    
    def validate(password):
        if len(password) < 6  or re.search('^[A-Za-z][A-Za-z0-9-_]*$',password) is None:
            print("password not accepted")
        else:
            print("Your password seems fine")
    
    import re
    
    user_input = raw_input('Please enter password:')
    
    if len(user_input)>=6 and user_input[0].isalpha() and re.match(r"^[\w-]*$", user_input):
          print('Yes')
    else:
          print('No')
    
    Import re
    Password = (input("enter password here:"))
    flag = 0
    while True:
              if (len(password)<7):
                    flag = -1
                    break
              elif not re.search("[a-z]",  password):
                    flag = -1
                    break
               elif not re.search("[A-Z]",  password):
                     flag = -1
                     break
               elif not re.search("[0-9]",  password):
                     flag = -1
                     break  
                elif not re.search("[#@$&*_]",  password):
                     flag = -1
                     break
                else:
                         flag = 0
                         print("strong")
                         break
    if flag == -1:
          print("weak")