文章目录
易泄露密码排名
NordPass是著名的密码管理工具,他们每年都会公布最常用的密码,例如2022年最常用密码如下
password123456123456789guestqwerty1234567811111112345col1234561231231234567123412345678900000005555556666661233216543217777777123
这个榜单其实每年变化并不大,所以每年看到类似的帖子,都让人有一种炒冷饭的既视感,但大多数人挑选这些密码也不是毫无缘由,毕竟这些密码简单容易记。但这些密码还有另外一个共同的特点,就是容易被破解。
Python标准库中有一个模块
secrets
,专门用于密码级的安全随机数。
secrets
secrets
用于生成高度加密的随机数,这些随机数适合做密码。
众所周知,伪随机数模块
random
生成的随机数并不随机,其原理无非是按照当前随机数种子,然后从随机数表中索引一个值而已。这个随机数种子是可以设置的,一般涉及到随机数生成的算法,都会实现声明随机数种子,以确保成果可复现。大多数情况下,如果不设置随机数种子,会按照系统时间来生成种子,进而生成随机数。所以,若是用
random
生成的随机数当密码,那被破解的几率应该是很高的。
secrets
中主要有三个函数,分别用于生成随机字节字符串、十六进制文本字符串以及URL随机字符串,其使用方法如下,输入参数为字符串长度。
>>>from secrets import*>>> token_bytes(16)b't\x98\x00\x86\xfa:\xdeV(E\xb0\x82\x96\x80T\xb3'>>> 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 _ inrange(4))print(pw)# '字节密码密码蕴含'
当然,一般来说这个词库是比较大的,从词库中挑出一组对自己来说有意义而对别人来说没啥意义的词汇,也是比较容易的。仅就上面的字节密码密码蕴含来说,至少包含32个字节,想暴力破解几乎是不可能的,想要记忆却很容易,想要推测却也十分困难。
版权归原作者 微小冷 所有, 如有侵权,请联系我们删除。