在Python中对列表进行散列和比较

在Python中对列表进行散列和比较,python,python-3.x,Python,Python 3.x,因此,我有一个简单的程序,它将常用密码列表中的所有值进行散列,然后将散列值与给定的散列值进行比较。然后破解密码 但是它似乎不起作用,因为passwd\u found仍然是错误的,我相信IF语句不起作用。感谢您的帮助 dic = [] passwd_hash = '4297f44b13955235245b2497399d7a93' passwd_found = False for k in dic: md5hash = hashlib.md5(k.encode('utf-8'))

因此,我有一个简单的程序,它将常用密码列表中的所有值进行散列,然后将散列值与给定的散列值进行比较。然后破解密码

但是它似乎不起作用,因为
passwd\u found
仍然是错误的,我相信IF语句不起作用。感谢您的帮助

dic = []

passwd_hash = '4297f44b13955235245b2497399d7a93'
passwd_found = False

for k in dic:
    md5hash = hashlib.md5(k.encode('utf-8'))
    print(md5hash.hexdigest())

if passwd_hash in md5hash:
    passwd_found = True
else:
    passwd_found = False

我认为缩进已关闭,您需要在比较中使用
.hexdigest()
,否则会出现错误:

TypeError:类型为“\u hashlib.HASH”的参数不可编辑


我认为缩进已关闭,您需要在比较中使用
.hexdigest()
,否则会出现错误:

TypeError:类型为“\u hashlib.HASH”的参数不可编辑


缩进是否结束?
md5hash
将等于
dic
中最后一个字符串的哈希值。这就是你想要的吗?@ChristianDean我想看看passwd_hash是否与列表中的任何哈希值匹配。如果passwd_hash==md5hash:,我会检查
,因为md5将始终生成相同长度的哈希(对于几乎任何哈希函数都是如此).是否缩进?
md5hash
将等于
dic
中最后一个字符串的哈希值。这就是你想要的吗?@ChristianDean我想看看passwd_hash是否与列表中的任何哈希值匹配。如果passwd_hash==md5hash:
,我会检查
,因为md5将始终生成相同长度的哈希值(对于几乎任何哈希函数都是如此)。另外,因为你调用了两次
hexdigest()
,可能值得同时存储哈希和摘要,以避免重复完成哈希,然后将摘要转换为十六进制表示。此外,如果由于某种原因对哈希进行了填充(因为哈希应始终生成相同数量的字节),则可能应该检查是否存在蛮值相等,或某个片段的蛮值相等。此外,由于调用了
hexdigest()
两次,可能值得同时存储哈希和摘要,以避免重复完成哈希,然后将摘要转换为十六进制表示。此外,如果由于某种原因对哈希进行了填充(因为哈希应始终生成相同数量的字节),则可能应该检查蛮值相等或某个片段的蛮值相等。
import hashlib

dic = ['123','1234','12345','123456','1234567','12345678','password', 'qwerty','abc','abcd','abc123','111111','monkey','arsenal','letmein','trustno1','dragon','baseball','superman','iloveyou','starwars','montypython','cheese','123123','football','batman']

passwd_hash = '4297f44b13955235245b2497399d7a93'
passwd_found = False

for k in dic:
    md5hash = hashlib.md5(k.encode('utf-8'))
    t_hash = md5hash.hexdigest()
    print(t_hash)

    if passwd_hash in t_hash:
        passwd_found = True
    else:
        passwd_found = False

    if passwd_found:
        print(k) # 123123 matches