使用Python生成安全的随机数以管理密钥


为了使用密码学方法生成安全的随机数,我们可以使用python中的secrets模块。此模块有助于创建安全的密码、帐户身份验证、安全令牌或一些相关的密钥。

要使用secrets模块的类和模块,我们应该将该模块导入到我们的代码中。

import secrets

随机数

secrets模块用于访问安全随机数源,这些源由操作系统提供。

secrets模块中与随机数相关的类和函数如下:

类 secrets.SystemRandom

这是一个用于生成随机数的类,它使用操作系统提供的最高质量的源。

方法 secrets.choice(sequence)

此方法用于从非空序列中随机选择一个元素。

方法 secrets.randbelow(n)

此方法用于从0到n(不包括n)的范围内选择一个整数值。

方法 secrets.randbits(k)

此方法用于返回一个具有k个随机位的整数。

生成令牌

secrets模块还可以生成一些安全的令牌。这些类型的令牌可用于生成密码重置、复杂的URL等。

一些与令牌生成相关的函数如下:

方法 secrets.token_bytes([nbytes=None])

此方法返回一个具有nbytes字节的随机字节字符串,以生成安全的令牌。当未给出nbytes值时,它使用指定的默认值。

方法 secrets.token_hex([nbytes=None])

此方法返回一个十六进制形式的随机文本字符串。返回的字符串具有nbytes个随机字节。每个字符可以转换为两个十六进制数字。当未给出nbytes值时,它使用指定的默认值。

方法 secrets.token_urlsafe([nbytes=None])

此方法用于返回一个随机的URL安全文本字符串。该文本基本上是Base64编码的。平均每个字节产生1.3个字符(大约)。

示例代码

import secrets
my_sequence = ['K','?','D',':','o','5','t','l','Y','0']
rand_pass = ''
for i in range(15):
   rand_char = secrets.choice(my_sequence)
   rand_pass += rand_char
print("Random Password is: " + rand_pass)
my_tok1 = secrets.token_hex(10) #Create HEX token of length 10 
my_tok2 = secrets.token_hex(5) #Create HEX token of length 5
print("First Token: " + my_tok1)
print("First Token: " + my_tok2)

输出

Random Password is: YK0l:YD??lKKY?o
First Token: f3e68646dcf1082e1038
First Token: e4ae3c2384

更新于:2019年7月30日

323 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告