SHA1哈希字典攻击代码调试求助(编程新手)
修复SHA-1字典攻击代码的方案
嘿,作为编程新手能尝试哈希破解已经超棒啦!我看你的代码写到一半断了,这就帮你补全并把关键细节讲清楚,让它能稳稳运行~
完整可运行代码
import hashlib # 需要破解的SHA-1哈希值(悄悄说:这个对应的明文是"password"哦) hash_to_crack = "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" # 字典文件路径,注意路径用正斜杠或者双反斜杠都可以 dict_file = "C:/Users/kiran/AppData/Local/Programs/Python/Python37/dictionary.txt" def main(): try: # 打开字典文件,指定utf-8编码避免乱码问题 with open(dict_file, 'r', encoding='utf-8') as fileobj: # 逐行读取字典,顺便记录行号方便定位 for line_num, line in enumerate(fileobj, 1): # 去掉每行末尾的换行符、空格,不然哈希计算会出错! word = line.strip() # 把字符串转成字节流,hashlib只认字节 word_bytes = word.encode('utf-8') # 计算当前单词的SHA-1哈希并转成十六进制字符串 hashed_word = hashlib.sha1(word_bytes).hexdigest() # 对比哈希值 if hashed_word == hash_to_crack: print(f"🎉 找到匹配的密码啦!密码是: {word}") print(f"在字典的第{line_num}行") return # 找到就直接退出,不用白跑剩下的内容 # 遍历完字典都没找到的情况 print("😮💨 字典里没有匹配的密码哦,可以换个字典试试") except FileNotFoundError: print(f"❌ 错误:找不到字典文件,请检查路径是否正确 -> {dict_file}") except Exception as e: print(f"❌ 发生未知错误:{str(e)}") if __name__ == "__main__": main()
新手必看的关键细节
- 文件读取坑点:
- 加
encoding='utf-8'是为了避免读取字典时出现中文/特殊字符乱码 strip()一定要加!如果字典里的单词末尾带换行符,计算出来的哈希会和目标完全不一样,直接导致匹配失败
- 加
- 哈希计算逻辑:
hashlib的哈希函数只能处理字节类型,所以必须用encode('utf-8')把字符串转成字节流hexdigest()会把哈希结果转成人类可读的十六进制字符串,和你要破解的哈希格式一致
- 错误防护:
- 捕获
FileNotFoundError:防止你写错字典路径时程序直接崩溃,会给出明确提示 - 通用异常捕获:万一遇到其他奇怪问题(比如字典权限不够),能看到具体错误信息,方便排查
- 捕获
- 小优化:
- 用
enumerate记录行号,找到密码时能快速定位它在字典里的位置 - 找到匹配后立刻
return,不用继续遍历剩下的字典,节省时间
- 用
测试小技巧
你可以先在dictionary.txt里加一行password,运行代码就能立刻看到匹配成功的提示,验证代码是否正常工作~
内容的提问来源于stack exchange,提问作者Kiran Vasu
相关产品推荐
相关产品推荐

