0


【Python标准库】用了Secrets,再也不用担心密码泄露

文章目录

易泄露密码排名

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个字节,想暴力破解几乎是不可能的,想要记忆却很容易,想要推测却也十分困难。


本文转载自: https://blog.csdn.net/m0_37816922/article/details/128208122
版权归原作者 微小冷 所有, 如有侵权,请联系我们删除。

“【Python标准库】用了Secrets,再也不用担心密码泄露”的评论:

还没有评论