小编典典

检查密码强度的最佳方法是什么?

algorithm

确保用户提供的密码是注册或更改密码表格中的强密码的最佳方法是什么?

我有一个主意(在python中)

def validate_password(passwd):
    conditions_met = 0
    conditions_total = 3
    if len(passwd) >= 6: 
        if passwd.lower() != passwd: conditions_met += 1
        if len([x for x in passwd if x.isdigit()]) > 0: conditions_met += 1
        if len([x for x in passwd if not x.isalnum()]) > 0: conditions_met += 1
    result = False
    print conditions_met
    if conditions_met >= 2: result = True
    return result

阅读 367

收藏
2020-07-28

共1个答案

小编典典

1:消除常用
密码,对照常用密码列表检查输入的密码(例如,查看泄漏的LinkedIn密码列表中的前100.000个密码:http : //www.adeptus-
mechanicus.com/codex/linkhap/combo_not.zip),请确保包括leetspeek替代词:A @,E3,B8,S5等。
在转到下面的第2部分之前,请从输入的短语中删除打击此列表的部分密码。

2:不要对用户强加任何规则

密码的黄金法则是越长越好。
不用强迫使用大写字母,数字和符号,因为(绝大多数)用户将:-将第一个字母大写;-将数字1放在末尾;- !如果需要符号,则在其后放一个。

而是检查密码强度

有关体面的起点,请访问:http :
//www.passwordmeter.com/

我建议至少遵循以下规则:

Additions (better passwords)
-----------------------------
- Number of Characters              Flat       +(n*4)   
- Uppercase Letters                 Cond/Incr  +((len-n)*2)     
- Lowercase Letters                 Cond/Incr  +((len-n)*2)     
- Numbers                           Cond       +(n*4)   
- Symbols                           Flat       +(n*6)
- Middle Numbers or Symbols         Flat       +(n*2)   
- Shannon Entropy                   Complex    *EntropyScore

Deductions (worse passwords)
----------------------------- 
- Letters Only                      Flat       -n   
- Numbers Only                      Flat       -(n*16)  
- Repeat Chars (Case Insensitive)   Complex    -    
- Consecutive Uppercase Letters     Flat       -(n*2)   
- Consecutive Lowercase Letters     Flat       -(n*2)   
- Consecutive Numbers               Flat       -(n*2)   
- Sequential Letters (3+)           Flat       -(n*3)   
- Sequential Numbers (3+)           Flat       -(n*3)   
- Sequential Symbols (3+)           Flat       -(n*3)
- Repeated words                    Complex    -       
- Only 1st char is uppercase        Flat       -n
- Last (non symbol) char is number  Flat       -n
- Only last char is symbol          Flat       -n

仅仅遵循密码表是不够的,因为足够确定其朴素的算法看起来Password1!是好的,而它却异常弱。确保在计分时忽略首字母大写以及尾随数字和符号(按照最后3条规则)。

3:不允许任何太弱的密码
与其强迫用户屈服于自欺欺人的规则, 还不如允许任何 得分高的事情。多少取决于您的用例。

2020-07-28