Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从哈希生成大小写密码_Python_Security_Hash_Passwords - Fatal编程技术网

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
从这里开始,观察这个数字是如何在你给出的各种字母表中处理的