使用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
广告