python生成4位以上复杂密码

python生成4位以上复杂密码

生成一个4位以上的随机密码,且至少包含一个数字、一个小写字母、一个大写字母、一个符号。确保复杂度随机性

设计思路

要确保生成的密码中包含四种字符,直接从ASCII编码库中随机抽取字符是无法满足的,总有可能抽取到相同类型的字符。而且既要包含四种字符,还要确保密码的随机性。

假设我们要生成8位密码:

第1位字符从数字0 ~ 9中随机选取一个字符
第2位字符从小写字母a ~ z中随机选取一个字符
第3位字符从大写字母A ~ Z中随机选取一个字符
第4位字符从自定义符号!@#$%&*()中随机选取一个字符
第5~8位,每一位先随机选取字符类型,再从该字符类型中随机选取字符
最后随机打乱8位密码的排列次序

其中,第1 ~ 4步确保每种字符类型都有一个,第5步确保密码中字符的随机性,第6步确保密码次序的随机性。

注意:其中第5 ~ 8位不建议从一个所有字符的合集中随机选取字符,由于字母有52个,而字符只有9个,这样获取到字母的概率远大于字符,降低了生成密码的随机性。所以要先从4中字符类型中随机选取一类,再从被选中的这一类中随机选取字符。

代码如下


import random,string										'''导入用于生成随机数的模块、字符串模块'''

def make_passwd(a):										'''传入参数a,表示要生成几位数密码'''
	char = [string.digits,string.ascii_lowercase,string.ascii_uppercase,'!@#$%&*()']	'''创建一个包含4个字符串的列表,4个字符串分别是:数字0~9,小写字母a~z,大写字母A~Z,自定义特殊符号'''
	passwd = []										'''创建一个空列表'''
	for i in range(0,4):									'''循环4次,确保每种类型字符至少有1个'''
		passwd.append(str(random.choice(char[i])))					'''按顺序从char[1]~char[4]这4个字符串中,利用random.choice()随机选择一个字符,利用str()将获取到的字符转换为字符串格式,然后用passwd.append()将该字符作为元素添加到列表passwd的末尾'''
	for i in range(0,a-4):									'''循环剩余位数,确保接下来获取到每种字符概率相同'''
		passwd.append(str(random.choice(random.choice(char))))				'''先从char列表当中随机选择一个字符串,再从被选中的字符串当中随机选择一个字符,转换为字符串格式后添加到列表passwd末尾'''
	random.shuffle(passwd)									'''随机打乱列表passwd中元素的次序'''
	passwd=''.join(passwd)									'''将列表passwd中的元素合并为一个字符串'''
	return passwd										'''返回结果'''

在Shell中的测试结果如下


>>> make_passwd(4)
'Yp%5'

>>> make_passwd(9)
'@7u(IpOI1'

>>> make_passwd(333)
'115)&WMR99TBe)KAsO(brA50nj(5Wf51t%!H0tb&LXR)*7R1l#7LL1%qptI)BOd1#$r$$49*3#42Ejps17%Onqprs)1bee0$&#&k2C4$10!(5xuP5@%F(5)!6MxF(G*B5@O&)28F1H9i%g7$@hrr@pz&A&5)lax2NnIxt4*O85ICR0x##%IX$9%N69h!ydpRaWWn1KJYvY#s*Z1&vWi(d7qpo2$6YqrZe92#TlLX0USpP!maa)66gz4*@uiT&X8cYE8*h#Y&Y4@U1P(56qA)gS3ss)Fj@fSDrzoR!88Kvm%u*&#dWe(&$D5q(*SUuW@9wuO67)Y3%i0W1'

本文到此结束。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值