Python模块生成安全的随机数

在本文中,我们将看到如何生成可以有效用作密码的安全随机数。除了随机数,我们还可以添加字母和其他字符以使其更好。

有秘密

secrets模块具有一个称为choice的功能,该功能可以使用for循环和范围功能来生成所需长度的密码。

示例

import secrets
import string
allowed_chars = string.ascii_letters + string.digits + string.printable
pswd = ''.join(secrets.choice(allowed_chars) for i in range(8))
print("The generated password is: \n",pswd)

输出结果

运行上面的代码给我们以下结果-

The generated password is:
$pB7WY

至少有条件

我们可以将小写字母,大写字母以及数字之类的条件强制设置为密码生成器的一部分。在这里,我们再次使用secrets模块。

示例

import secrets
import string
allowed_chars = string.ascii_letters + string.digits + string.printable
while True:
pswd = ''.join(secrets.choice(allowed_chars) for i in range(8))
if (any(c.islower() for c in pswd) and any(c.isupper()
   for c in pswd) and sum(c.isdigit() for c in pswd) >= 3):
      print("The generated pswd is: \n", pswd)
      break

输出结果

运行上面的代码给我们以下结果-

The generated pswd is:
p7$7nS2w

随机代币

在处理url时,如果您希望随机令牌成为URL的一部分,我们可以使用secrets模块中的以下方法。

示例

import secrets
# A random byte string
tkn1 = secrets.token_bytes(8)
# A random text string in hexadecimal
tkn2 = secrets.token_hex(8)
# random URL-safe text string
url = 'https://thename.com/reset=' + secrets.token_urlsafe()
print("A random byte string:\n ",tkn1)
print("A random text string in hexadecimal: \n ",tkn2)
print("A text string with url-safe token: \n ",url)

输出结果

运行上面的代码给我们以下结果-

A random byte string:
b'\x0b-\xb2\x13\xb0Z#\x81'
A random text string in hexadecimal:
d94da5763fce71a3
A text string with url-safe token:
https://thename.com/reset=Rd8eVookY54Q7aTipZfdmz-HS62rHmRjSAXumZdNITo