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加密模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现获取近期天气数据并显示在窗口

    Python实现获取近期天气数据并显示在窗口

    这篇文章主要为大家详细介绍了Python如何通过调用wttr.in天气API获取指定城市(如上海)的实时天气数据,并使用Tkinter构建图形界面展示,感兴趣的小伙伴可以了解下
    2026-06-06
  • python使用Qt界面以及逻辑实现方法

    python使用Qt界面以及逻辑实现方法

    这篇文章主要介绍了python使用Qt界面以及逻辑实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Pygame实战练习之飞机大战游戏

    Pygame实战练习之飞机大战游戏

    飞机大战想必是很多人童年时期的经典游戏,我们依旧能记得抱个老人机娱乐的场景,下面这篇文章主要给大家介绍了关于如何利用python写一个简单的飞机大战小游戏的相关资料,需要的朋友可以参考下
    2021-09-09
  • Pytorch写数字识别LeNet模型

    Pytorch写数字识别LeNet模型

    这篇文章主要介绍了Pytorch写数字识别LeNet模型,LeNet-5是一个较简单的卷积神经网络,  LeNet-5 这个网络虽然很小,但是它包含了深度学习的基本模块:卷积层,池化层,全连接层。是其他深度学习模型的基础, 这里我们对LeNet-5进行深入分析,需要的朋友可以参考下
    2022-01-01
  • Python变量命名规范的总结

    Python变量命名规范的总结

    在Python编程中,变量命名规范对于编写优雅和可维护的代码至关重要,本文主要介绍了Python变量命名规范的总结,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • python2 与python3的print区别小结

    python2 与python3的print区别小结

    这篇文章主要介绍了python2 与python3的print区别小结,需要的朋友可以参考下
    2018-01-01
  • python 判断参数为Nonetype类型或空的实例

    python 判断参数为Nonetype类型或空的实例

    今天小编就为大家分享一篇python 判断参数为Nonetype类型或空的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python神器之使用watchdog监控文件变化

    Python神器之使用watchdog监控文件变化

    这篇文章主要为大家详细介绍了Python中的神器watchdog以及如何使用watchdog监控文件变化,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2023-12-12
  • Python脚本实现虾米网签到功能

    Python脚本实现虾米网签到功能

    这篇文章主要介绍了Python脚本实现虾米网签到功能的方法,涉及Python调用URL模块实现数据传输与处理的相关技巧,需要的朋友可以参考下
    2016-04-04
  • 详解如何利用Python绘制科赫曲线

    详解如何利用Python绘制科赫曲线

    科赫曲线是一种像雪花的几何曲线,所以又称为雪花曲线,它是de Rham曲线的特例。本文将利用Python语言实现这一曲线,需要的可以参考一下
    2022-05-05

最新评论