Python密码强度

Ano*_*ous 4 python passwords numbers

我在python上编写密码强度代码,我试图找出我的密码(p)是否包含一个数字,我已经找到了如何查看它是否包含大小写字母p.isupper()或者p.islower().我也把它们放在一起了.我的朋友告诉我如何查看密码是否只包含数字,但我现在需要你的帮助.

running=True
while running:
    p=raw_input("What is your Password? ")
    if len(p) <6:
        print "Your Password is too short"
    if len(p) >12:
        print "Your Password is too long"
    if len(p) == 6 or 7 or 8 or 9 or 10 or 11 or 12:
        print "Password Length OK"
        running=False

print "Loop Broken" #this will be deleted, only for my help now

if p.isupper():
    print "Your Password is weak as it only contains capital letters"

if p.islower():
    print "Your Password is weak as it only contains lower case letters"

if p.isupper and p.islower:
    print "Your Password is of medium strength, try adding some numbers"

try:
    int(p)
    print "Your Password is weak as it only contains numbers"
except (ValueError, TypeError):
    pass
Run Code Online (Sandbox Code Playgroud)

如果密码包含小写或大写字母和数字,我现在需要的是代码.

jdo*_*dot 6

对我来说,正则表达式绝对是解决这个问题的最简单方法.

给定一个示例密码password,您检查它的方式是:

import re
# Check if contains at least one digit
if re.search(r'\d', password):
    print "Has a digit"
# Check if contains at least one uppercase letter
if re.search(r'[A-Z]', password):
    print "Has uppercase letter"
# Check if contains at least one lowercase letter
if re.search(r'[a-z]', password):
    print "Has lowercase letter"
Run Code Online (Sandbox Code Playgroud)

对于您的其他作品,您可以继续使用.isupper().islower().

顺便说一下,这部分代码:

if p.isupper and p.islower:
    print "Your Password is of medium strength, try adding some numbers"
Run Code Online (Sandbox Code Playgroud)

不会按照你想要的方式运作.首先,你实际上并没有调用方法,因为你没有放括号 - 你需要写if p.isupper() and p.islower():.其次,这实际上并不是你想要的.你尝试检查它包含两个小写和大写数字.相反,你要检查它是完全大写还是完全小写,显然它不能同时存在,所以if语句将始终返回False.相反,你会想要使用类似的东西:

if re.search(r'[a-z]', password) and re.search(r'[A-Z]', password):
Run Code Online (Sandbox Code Playgroud)

或者,或者,没有re:

import string
if any(letter in string.ascii_lowercase for letter in password) and \
  any(letter in string.ascii_uppercase for letter in password):
Run Code Online (Sandbox Code Playgroud)

要么:

if any(letter.islower() for letter in password) and \
  any(letter.isupper() for letter in password):
Run Code Online (Sandbox Code Playgroud)

我碰巧更喜欢,re因为它更简洁.