密码不用想了,随机生成吧

有时候需要一些高复杂度的密码,比如在安全性要求较高的服务上注册一个账号,常规的密码会显得很弱。很多网站的账号注册也有密码强度的提示。怎么设计一个复杂的密码?

通常我们设置密码都使用熟悉的字符数字组合,一方面满足一定的复杂度,另一方面便于记忆。但很多时候,这样的组合方法并不是最强的,甚至是不合适。

我们谈复杂的密码实际是指密码的强度。密码强度越强,它被暴力破解或基于字典的猜测正确的概率越低,它和密码的长度字符范围有关。

就从长度字符范围这两点看,可以设计很复杂的密码以满足一些场景的使用。

  • chr

    Python中的一个内建函数,输入Unicodeordinal(码位)返回对应的字符。它的范围在0 <= i <= 0x10ffff

  • ord

    ord也是Python的内建函数,功能正好和chr相反

考虑到可读和输入方便,接下来的例子选择Unicode码位范围为33~127

1
2
3
4
5
6
import random

def generate_random_password(size):
if size > 95:
raise Exception("too large")
return ''.join([chr(i) for i in random.sample(range(33, 128), size)])

输出几个例子,长度都为20:

1
2
3
4
5
6
7
8
9
10
6cr#_+!D`LUy[3oV]h9d
P:qv.|3-OI7KRbZjr)wQ
af>LXc8Oo]u9KS}C,mby
JGo]\Iu$lj7)c/N=#(W
4E7vzVa@]AY[\LIe1ypO
2|/"McH_`04GWCAYO;a]
IR3,jNJKvclYT:Z<@rOq
P8xCOWJe)H@+_,?;u9hb
UWT{kSw;V4tr#*>Gd1p_
XT8]<#Rv|UHr+)&E?%o5

可以为 random模块设定初始化随机种子。

1
2
3
4
import random
import os

random.seed(os.urandom(100))

如果还需要更复杂的密码,可以把Unicode码位范围设置更大和更长的密码长度。

此外过去在文章生成随机IP地址或地址集说过生成随机IP地址或CIDR地址即。

转载请包括本文地址:https://allenwind.github.io/blog/5785
更多文章请参考:https://allenwind.github.io/blog/archives/