You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:22:42