【发布时间】:2019-05-30 15:20:45
【问题描述】:
逻辑
每个列表都有不同的函数名称,如下所示:
md5 = [gamma, alpha, beta, theta, delta]
sha1 = [alpha, beta, theta, delta]
sha256 = [alpha, beta, theta]
sha384 = [alpha, beta, theta]
sha512 = [alpha, beta, theta]
也就是说,如果一个函数for调用md5列表,那么md5列表中的所有函数都会运行。
将根据列表字典调用其中一个列表。但是为了确定要采用哪个函数列表,有一个这样创建的字典:
hashdict = {}
hashdict['md5'] = [ 'md5' , 32 , md5 ]
hashdict['sha1'] = [ 'sha1' , 40 , sha1 ]
hashdict['sha256'] = [ 'sha256' , 64 , sha256 ]
hashdict['sha384'] = [ 'sha384' , 96 , sha384 ]
hashdict['sha512'] = [ 'sha512' , 128 , sha512 ]
功能
此函数获取用户提交的哈希,检查字符串长度是否与 hashdict{} 内任何字典列表中的长度相匹配。如果长度匹配例如:32 个字符,那么它将是 md5 哈希。
脚本知道字典中正确的列表后,会从hashdict中的特定列表中取出函数(第三个列表项-列表的第二个索引),并将其传递给一个名为api。
def crack(hashvalue):
result = False
hashInDict = False
for hashList in list(hashdict.values()):
if len(hashvalue) in hashList:
hashInDict = True
if not file:
print(f'{info} Hash Function : {hashList[0].upper()}')
for api in hashList[2]:
r = api(hashvalue, hashList[0])
if r:
return r
else:
if hashInDict == False:
if not file:
print(f'{bad} This hash type is not supported.')
quit()
else:
return False
问题
仅当哈希为 md5 并且传递的任何其他哈希导致消息“不支持此哈希类型”时才有效。不知何故。如果我删除字典并使用 if-else 来比较哈希字符串长度,一切正常。但是使用字典列表会导致所有其他哈希被忽略,并且只有第一个字典列表有效。
如果我将第一个字典列表替换为例如 sha1,则只会检测到 sha1 哈希,而所有其他哈希将导致打印不支持哈希。
我不知道为什么它会忽略第一个字典列表项之后的任何内容。
【问题讨论】:
-
什么是
hashdict?请提供所有相关代码,这里似乎不足以对正在发生的事情和预期结果做出合乎逻辑的假设。另外,您不能“call”列表...这是什么意思? -
请添加输入和所需的输出。帮助更容易。
-
@Jab >> 感谢您的回复。我已经用相关代码编辑了整个问题。主要思想是让用户输入一个哈希,然后脚本使用字符串长度检测哈希的类型,并相应地运行不同的函数列表来破解每种类型的哈希。
-
@Error-SyntacticalRemorse >> 感谢您的回复,我已经用相关代码编辑了整个问题。
标签: python dictionary