【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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章