Python 从哈希生成大小写密码
我正在实现一个密码生成器,它根据服务名称和主密码创建密码。为此,主密码和服务被散列。现在我只有小写字母和数字。我怎样才能包括大写字母和特殊符号 我发现下面的代码似乎解决了这个问题。我应该用它吗?它到底做什么Python 从哈希生成大小写密码,python,security,hash,passwords,Python,Security,Hash,Passwords,我正在实现一个密码生成器,它根据服务名称和主密码创建密码。为此,主密码和服务被散列。现在我只有小写字母和数字。我怎样才能包括大写字母和特殊符号 我发现下面的代码似乎解决了这个问题。我应该用它吗?它到底做什么 raw_hexdigest = make_password(plaintext, service) # Convert the hexdigest into decimal num = int(raw_hexdigest, 16) # What base will we convert
raw_hexdigest = make_password(plaintext, service)
# Convert the hexdigest into decimal
num = int(raw_hexdigest, 16)
# What base will we convert `num` into?
num_chars = len(alphabet)
# Build up the new password one "digit" at a time,
# up to a certain length
chars = []
while len(chars) < length:
num, idx = divmod(num, num_chars)
chars.append(alphabet[idx])
return ''.join(chars)
raw\u hexdigest=make\u密码(纯文本,服务)
#将十六进制摘要转换为十进制
num=int(原始摘要,16)
#我们将把'num'转换成什么基?
num_chars=len(字母表)
#每次设置一个“数字”的新密码,
#达到一定长度
字符=[]
而len(chars)<长度:
num,idx=divmod(num,num\u字符)
附加字符(字母表[idx])
返回“”。加入(字符)
首先,请注意,散列密码作为整数键返回。您返回的密码只是以某个基数表示的整数,带有给定的字母表。关键是您提供的字母表
对于基数10,字母表为“01234356789”;对于十六进制,它是“01234356789ABCDEF”。您似乎一直在使用36进制:10位数字和26个小写字母
要扩展此功能,只需将字母表
指定为密码中所需的字符
更详细地说,底部的循环是逐位转换。base
是字母表的长度。在每次迭代中,循环使用divmod
将传递键整数拆分为该基(idx
)中的“单位”值和商,即整数的其余部分。然后,它从字母表中选择相应的字符,并将其附加到一个字符串中,该字符串最终成为密码
我建议您插入一些战略性的print
语句,并观察其运行情况。。。也许在10进制,然后是16进制。不要调用make_password
,只需将密钥设置为您可以识别的内容,例如
raw_hexdigest = 1024 + 256 + 4 + 1
从这里开始,观察这个数字是如何在你给出的各种字母表中处理的