Python生成安全随机密码(secrets)
HDUZN

secrets 模块可用于生成高加密强度的随机数,适应管理密码、账户验证、安全凭据和相关机密数据管理的需要。

特别地,应当优先使用 secrets 来替代 random 模块中的默认伪随机数生成器,random 被设计用于建模和仿真,而不适用于安全和加密。

1.简单随机密码

主要了解下 secrets 的几个函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import secrets
import string

def easy_passwd():
num = secrets.randbelow(10) # [0,n) 区间的安全随机整数
print("num:", num)

s = secrets.choice(["a","b","z"]) # 在一个序列中随机挑选一个元素
print(s)

b_s = secrets.token_bytes(nbytes=6) # 随机生成指定长度的一串字节串
print(b_s) # b'\x03\x8c\xc9\x1f\x88z'

hex_s = secrets.token_hex(nbytes=6) # 随机生成指定长度的一串16进制字符串
print(hex_s) # 739ca28ec0b4

urlsafe_s = secrets.token_urlsafe(12) # 随机成成指定长度的一串url安全的字符串
print(urlsafe_s) # 6pQFjrPf_dWwjcIK
url = 'https://mydomain.com/reset=' + urlsafe_s

easy_passwd()

2.高加密强度安全随机密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import secrets
import string

# 生成指定长度的字母数字密码
def letter_digit_passwd(length):
# s='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
s = string.ascii_letters + string.digits
passwd = ''.join(secrets.choice(s) for i in range(length))
return passwd

# 生成指定长度的字母数字密码:至少1个小写字母,upper_num个大写字母和digit_num个数字
def letter_digit_passwd2(length, upper_num, digit_num):
s = string.ascii_letters + string.digits
while True:
password = ''.join(secrets.choice(s) for i in range(length))
if (any(c.islower() for c in password)
and sum(c.isupper() for c in password) >= upper_num
and sum(c.isdigit() for c in password) >= digit_num):
break
return password

# 生成指定长度的字母数字密码
print(letter_digit_passwd(32)) # Ox8zw4FgCL8rehnAIcenK4jufrT0K3Bi

# 生成指定长度的字母数字密码:至少1个小写字母,2个大写字母和3个数字
print(letter_digit_passwd2(16, 2, 3)) # mavo52y2gMcjTLNR

官方文档:secrets — 生成安全随机数字用于管理密码

3.Linux生成随机密码

在Linux系统中,生成随机密码就更简单了,就一句命令。

1
openssl rand -base64 32

这个命令会生成一个32字节的随机字符串,并用base64编码输出。

  • 本文标题:Python生成安全随机密码(secrets)
  • 本文作者:HDUZN
  • 创建时间:2022-07-12 21:25:27
  • 本文链接:http://hduzn.cn/2022/07/12/Python生成安全随机密码/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论