跳过正文
  1. 程序笔记/

Python 生成高强度密码

·787 字·2 分钟·
Python
NaCl - 摸鱼中
作者
NaCl - 摸鱼中
我将堕入厨房,换你一顿饱饭
目录

有些场合需要高强度密码,例如可参考 选择更安全的密码

  1. 选一个短语:“圣人千虑,必有一失。
  2. 变形:Srqlby1s
  3. 添加特殊字符:#Srqlby1s:
  4. 将它同网站联系起来:
    • 第一个字是一三声,那么首字母大写,网站名称放在左边。
    • 淘宝网:#Srqlby1s:tBw
    • 新浪微博:XlWb#Srqlby1s:
    • 人人网:#Srqlby1s:rRw
    • 优酷网:YkW#Srqlby1s:

还有的时候,可能需要更无序随机的密码。(比如为了不那么费脑子推断)

secrets 模块
#

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

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

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

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

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

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

自用代码
#

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

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()

相关文章

坐在路边鼓掌的人
·1894 字·4 分钟
阅读
枕头人
·1742 字·4 分钟
阅读
路口的三个死囚笼
·665 字·2 分钟
阅读