我是靠谱客的博主 动听钢笔,最近开发中收集的这篇文章主要介绍【Python标准库】用了Secrets,再也不用担心密码泄露,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 易泄露密码排名
    • secrets
    • XKCD风格密码

易泄露密码排名

NordPass是著名的密码管理工具,他们每年都会公布最常用的密码,例如2022年最常用密码如下

password123456123456789guestqwerty
1234567811111112345col123456123123
123456712341234567890000000555555
6666661233216543217777777123

这个榜单其实每年变化并不大,所以每年看到类似的帖子,都让人有一种炒冷饭的既视感,但大多数人挑选这些密码也不是毫无缘由,毕竟这些密码简单容易记。但这些密码还有另外一个共同的特点,就是容易被破解。

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,再也不用担心密码泄露所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部