Python 生成高强度密码

生成一大堆,选一个顺眼的用

选择更安全的密码 可以帮你看出怎样的密码是个好密码,不过有些平台可用 两步验证(2FA) 代替密码更安全。

secrets 模块

例如,生成长度为八个字符的字母数字密码:

1
2
3
4
import string
import secrets
alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(8))

例如,生成长度为十个字符的字母数字密码,包含至少一个小写字母,至少一个大写字母以及至少三个数字:

1
2
3
4
5
6
7
8
9
import string
import secrets
alphabet = string.ascii_letters + string.digits
while True:
    password = ''.join(secrets.choice(alphabet) for i in range(10))
    if (any(c.islower() for c in password)
            and any(c.isupper() for c in password)
            and sum(c.isdigit() for c in password) >= 3):
        break

加入特殊字符

string 模块提供一些预设字符串常量,如:

  • string.punctuation!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

但是有些网站无法使用所有的标点符号,那么这里可以自定义为:

  • ?!@#$%^&*_-+=[]<>;:,.

自用代码

以下代码应该不用注释你也能看懂,中文的信息密度值得信赖。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import secrets
import string

字母数字 = string.digits + string.ascii_letters
字符 = 字母数字 + r"?!@#$%^&*_-+=[]<>;:,."
字符plus = 字母数字 + string.punctuation


def main():  # 哪个好看选哪个
    # print(生成密码(字符))
    # print(生成密码(字符))
    # print(生成密码(字符))
    print(生成密码())
    print(生成密码())
    print(生成密码())


def 抽取(字符池, 长度):
    密码 = "".join(secrets.choice(字符池) for i in range(长度))
    return 密码


def 检查(密码, 字符池, 数量):
    if sum(c in 字符池 for c in 密码) >= 数量:
        return True
    else:
        return False


def 生成密码(字符池=字符plus, 长度=12, 数字数=1, 小写数=1, 大写数=1, 特殊字符数=1):
    while True:
        密码 = 抽取(字符池, 长度)
        if (
            检查(密码, string.digits, 数字数)
            and 检查(密码, string.ascii_lowercase, 小写数)
            and 检查(密码, string.ascii_uppercase, 大写数)
            and 检查(密码, string.punctuation, 特殊字符数)
        ):
            break
    return 密码


if __name__ == "__main__":
    main()
当你有机会做出选择时,不要让自己后悔
使用 Hugo 构建
主题 StackJimmy 设计