Python中如何检测哈希是否匹配?现有代码无法正常运行
修正后的哈希匹配检测实现
原代码存在几个关键问题导致无法正常工作:
- 读取文件时保留了每行末尾的换行符,生成的哈希会包含换行符,与
hashes.txt中的哈希无法匹配 - 最后的匹配逻辑错误,直接比较两个完整列表是否相等,而非检查单个密码的哈希是否存在于哈希列表中
- 未对哈希列表做预处理,使用列表查找效率较低
以下是正确实现的代码:
import hashlib # 读取哈希文件,去除换行符并转为集合(集合查找效率远高于列表) with open("hashes.txt", "r") as hash_file: target_hashes = {line.strip().lower() for line in hash_file} # 读取密码文件并逐个处理 with open("common.txt", "r") as password_file: for password in password_file: # 去除密码行的换行符,避免生成含换行的哈希 clean_password = password.strip() if not clean_password: # 跳过空行 continue # 生成SHA256哈希的十六进制字符串 sha256_hash = hashlib.sha256(clean_password.encode()).hexdigest().lower() # 检查哈希是否存在 if sha256_hash in target_hashes: print(f"找到匹配:密码 '{clean_password}' 的哈希 {sha256_hash} 存在于hashes.txt中") else: print(f"未找到匹配:密码 '{clean_password}' 的哈希 {sha256_hash} 不在hashes.txt中")
关键说明:
- 去除换行符:使用
strip()去除每行开头结尾的空白字符(包括换行符),确保生成的哈希仅对应密码本身 - 使用集合存储哈希:集合的成员检查操作
in时间复杂度为O(1),比列表的O(n)效率高很多,尤其当哈希数量大时更明显 - 统一小写:将生成的哈希和目标哈希转为小写,避免因大小写不一致导致匹配失败(有些哈希文件可能用大写存储)
- 跳过空行:处理密码文件中的空行,避免生成空字符串的哈希
内容的提问来源于stack exchange,提问作者Skrug Nuggsta
相关产品推荐
相关产品推荐

