概述
文章目录
- 易泄露密码排名
- secrets
- XKCD风格密码
易泄露密码排名
NordPass是著名的密码管理工具,他们每年都会公布最常用的密码,例如2022年最常用密码如下
password | 123456 | 123456789 | guest | qwerty |
12345678 | 111111 | 12345 | col123456 | 123123 |
1234567 | 1234 | 1234567890 | 000000 | 555555 |
666666 | 123321 | 654321 | 7777777 | 123 |
这个榜单其实每年变化并不大,所以每年看到类似的帖子,都让人有一种炒冷饭的既视感,但大多数人挑选这些密码也不是毫无缘由,毕竟这些密码简单容易记。但这些密码还有另外一个共同的特点,就是容易被破解。
Python标准库中有一个模块secrets
,专门用于密码级的安全随机数。
secrets
secrets
用于生成高度加密的随机数,这些随机数适合做密码。
众所周知,伪随机数模块random
生成的随机数并不随机,其原理无非是按照当前随机数种子,然后从随机数表中索引一个值而已。这个随机数种子是可以设置的,一般涉及到随机数生成的算法,都会实现声明随机数种子,以确保成果可复现。大多数情况下,如果不设置随机数种子,会按照系统时间来生成种子,进而生成随机数。所以,若是用random
生成的随机数当密码,那被破解的几率应该是很高的。
secrets
中主要有三个函数,分别用于生成随机字节字符串、十六进制文本字符串以及URL随机字符串,其使用方法如下,输入参数为字符串长度。
>>> from secrets import *
>>> token_bytes(16)
b'tx98x00x86xfa:xdeV(Exb0x82x96x80Txb3'
>>> token_hex(16)
'1b65dcaf5f1e9bd96fa8639b966d7cde'
>>> token_urlsafe(16)
'8EgjGpnKISzTM2WgPYk4tQ'
当然,除了这三个主要函数之外,secrets
也具备基本的随机数功能,即
choice(lst)
从lst
中挑选出一个元素返回randbelow(n)
生成小于n的自然数randbits(n)
生成不超过n位bit的随机整数
>>> choice([1,2,3])
1
>>> randbelow(5)
3
>>> randbits(5)
10
XKCD风格密码
所谓XKCD
,尽管带有CXK三个字,但经过严密地考证,发现和ikun没什么关系,而且也不是某些单词的缩写,这四个字母仿佛是随机选出来的。而之所以选择这四个字母,乃因这四个字母连在一起没法组成任何音节,无法发音,或许这也是密码安全的一种暗示吧。
简单来说,XKCD
其实就是用单词来取代字符作为密码的最基本元素,由于单词都是有含义的,所以由单词组成的密码,相对来说是比较好记的;但另一方面,单词所蕴含的字节数是远多于字符的,换言之,用单词组成的密码,不易被破解。
如下面代码所示,通过四个单词组成了一个密码
import secrets
words = ["单词","蕴含","字节","字符","密码", "简单", "发音"]
pw = "".join(secrets.choice(words) for _ in range(4))
print(pw)
# '字节密码密码蕴含'
当然,一般来说这个词库是比较大的,从词库中挑出一组对自己来说有意义而对别人来说没啥意义的词汇,也是比较容易的。仅就上面的字节密码密码蕴含来说,至少包含32个字节,想暴力破解几乎是不可能的,想要记忆却很容易,想要推测却也十分困难。
最后
以上就是动听钢笔为你收集整理的【Python标准库】用了Secrets,再也不用担心密码泄露的全部内容,希望文章能够帮你解决【Python标准库】用了Secrets,再也不用担心密码泄露所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复