【Python】基于哈希生成密码

# -*- coding: utf-8 -*-
# Create hash-based password.

import hashlib

allAlphaList = [chr(x) for x in range(97, 123)]

def Hash(password):
	sha = hashlib.sha512()
	sha.update(password.encode('utf-8'))
	return sha.hexdigest()

def Place(passwordHex, digitListUsed, mapUpAlphaListUsed, mapLowAlphaListUsed):
	placeList = ''.join(filter(str.isalpha, passwordHex)).replace('a', '1').replace('b', '1').replace('c', '2').replace('d', '2').replace('e', '3').replace('f', '3')
	passwordPlaced = ''
	for n in placeList:
		try:
			if n == '1':
				passwordPlaced += digitListUsed.pop()
			elif n == '2':
				passwordPlaced += mapUpAlphaListUsed.pop()
			elif n == '3':
				passwordPlaced += mapLowAlphaListUsed.pop()
		except:
			continue
	return passwordPlaced

def Main():
	password = input('Please input your password: ')

	try:
		num = int(input('Please input your password length ([6,30], default 20): '))
		if num < 6 or num > 30:
			num = 20
	except:
		num = 20

	passwordHex = Hash(password)
	
	digitList = [x for x in passwordHex if x.isdigit()]
	digitListUsed = digitList[:int('{:.0f}'.format(num*0.25))]
	
	alphaList = [x for x in passwordHex if x.isalpha()]
	alphaListUsed = alphaList[:(num - len(digitListUsed))]
	mapAlphaListUsed = [allAlphaList[allAlphaList.index(alphaListUsed[i]) + int(digitList[i])] for i in range(len(alphaListUsed))]
	mapUpAlphaListUsed = [x.upper() for x in mapAlphaListUsed[::2]]
	mapLowAlphaListUsed = mapAlphaListUsed[1::2]

	print('{}\n'.format(Place(passwordHex, digitListUsed, mapUpAlphaListUsed, mapLowAlphaListUsed)))
	
	Main()
	
Main()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值