Python标准库之加密模块详解

 更新时间:2023年07月05日 10:44:10   作者:微小冷  
这篇文章主要为大家详细介绍了Python标准库中加密模块的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下

通过random生成随机码

一般来说,若想生成一段随机字符串密码,可通过random来实现,具体方法如下

import random
import string

TOTAL = string.ascii_letters + string.digits + string.punctuation
def genSecrets(L=16):
    return "".join([random.sample(TOTAL, 1)[0] for _ in range(L)])

其中TOTAL即从string模块中挑选出的所有字母、数字以及标点符号,作为密码的字符集,然后通过random.sample从TATOL中抽取特定长度的字符,最终得到一个字符串,效果如下

>>> genSecrets()
'~5~sn6fWH\\W^`L6W'
>>> genSecrets(20)
':rWOGXY{jus{.?D/&MaY'
>>> genSecrets(128)
'e~qzAB],FkU82"0N<yX)M0l>OIsWfA\\G$?K?*ANg"ii\\e~YQ?3QQ9dToZ_\\IzhDuS8(]V!o_Wzkz}sI?pJS&fAs|i|;P}-T*-OtY9G=`27|2\\<6-]/.q:|ODV"j#X5s]'

但众所周知,伪随机数模块random生成的随机数并不随机,其原理无非是按照当前时间进行编码,然后从随机数表中索引到一个值。换言之,genSecrets这个函数生成的密码并不安全。

secrets

相比之下,secrets模块可用于生成高度加密的随机数,这些随机数适合做密码。

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

Python标准库中提供了一些secrets的使用技巧,例如生成长度为八个字符的字母数字密码:

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

XKCD风格密码

所谓XKCD,尽管带有CXK三个字,但经过严密地考证,发现和ikun没什么关系,而且也不是某些单词的缩写,这四个字母仿佛是随机选出来的。而之所以选择这四个字母,乃因这四个字母连在一起没法组成任何音节,就是发不了音。

简单来说,XKCD其实就是用单词来取代字符作为密码的最基本元素,由于单词都是有含义的,所以由单词组成的密码,相对来说是比较好记的;但另一方面,单词所蕴含的字节数是远多于字符的,换言之,用单词组成的密码,不易被破解。

如下面代码所示,通过四个单词组成了一个密码

import secrets
words = ["单词","蕴含","字节","字符","密码", "简单", "发音"]
pw = " ".join(secrets.choice(words) for _ in range(4))
print(pw)
# '字节 密码 密码 蕴含'

当然,一般来说这个词库是比较大的,从词库中挑出一组对自己来说有意义而对别人来说没啥意义的词汇,也是比较容易的。仅就上面的字节密码密码蕴含来说,至少包含32个字节,想暴力破解几乎是不可能的,想要记忆却很容易,想要推测却也十分困难。

到此这篇关于Python标准库之加密模块详解的文章就介绍到这了,更多相关Python加密模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pygame实现俄罗斯方块游戏(对战篇1)

    pygame实现俄罗斯方块游戏(对战篇1)

    这篇文章主要为大家详细介绍了pygame实现俄罗斯方块游戏的对战篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Python命令行click参数用法解析

    Python命令行click参数用法解析

    这篇文章主要介绍了Python命令行click参数用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Anaconda安装pytorch和paddle的方法步骤

    Anaconda安装pytorch和paddle的方法步骤

    本文主要介绍了Anaconda安装pytorch和paddle的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 用Python实现给Word文档盖章

    用Python实现给Word文档盖章

    大家好,本篇文章主要讲的是用Python实现给Word文档盖章,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Tensorflow中的placeholder和feed_dict的使用

    Tensorflow中的placeholder和feed_dict的使用

    这篇文章主要介绍了Tensorflow中的placeholder和feed_dict的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 浅析Python中getattr和getattribute的调用

    浅析Python中getattr和getattribute的调用

    在Python中,getattr和getattribute是两个用于属性访问的重要函数,它们可以在运行时动态地获取对象的属性或自定义属性访问行为,下面我们就来学习一下它们的具体用法吧
    2023-11-11
  • 对python中的six.moves模块的下载函数urlretrieve详解

    对python中的six.moves模块的下载函数urlretrieve详解

    今天小编就为大家分享一篇对python中的six.moves模块的下载函数urlretrieve详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python在CMD界面读取excel所有数据的示例

    python在CMD界面读取excel所有数据的示例

    这篇文章主要介绍了python在CMD界面读取excel所有数据,帮助大家更好的利用python办公,感兴趣的朋友可以了解下
    2020-09-09
  • win10环境下配置vscode python开发环境的教程详解

    win10环境下配置vscode python开发环境的教程详解

    这篇文章主要介绍了win10环境下配置python开发环境(vscode)的教程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Python编程functools模块创建修改的高阶函数解析

    Python编程functools模块创建修改的高阶函数解析

    本篇文章主要为大家介绍functools模块中用于创建、修改函数的高阶函数,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-09-09

最新评论