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

解决Hashlib.HASH不可订阅报错及SHA-256后缀匹配代码问题

问题解决与代码修改

核心错误原因

hashlib.sha256()返回的是HASH对象,不是字符串,所以无法直接用下标(hash2[-1])或endswith()方法操作,必须先调用hexdigest()方法将其转换为十六进制哈希字符串。

原代码其他问题

  1. 未导入hashlib模块,缺少必要依赖。
  2. 条件判断逻辑完全错误:需求是哈希最后四位为"ffff",原代码却在判断字符不等于"c"。
  3. 语法错误:and_hash2应为and hash2,末尾多余的|需删除。
  4. 变量未定义:word作为输入参数需要明确传入,且最终result不应赋值为HASH对象。

修改后的完整代码

import hashlib

def find_target_hash_string(initial_word):
    current_str = initial_word
    while True:
        # 生成SHA-256哈希的十六进制字符串
        hash_hex = hashlib.sha256(current_str.encode("utf-8")).hexdigest()
        # 检查哈希最后四位是否为"ffff"
        if hash_hex.endswith("ffff"):
            break
        # 追加字符(这里用"a",可根据需要改为循环a-z加快查找)
        current_str += "a"
    return current_str, hash_hex

# 示例调用
final_str, final_hash = find_target_hash_string("test")
print(f"符合条件的字符串: {final_str}")
print(f"对应的SHA-256哈希: {final_hash}")

关键修改说明

  • 导入hashlib:必须导入才能使用SHA-256哈希功能。
  • 使用hexdigest():将HASH对象转为十六进制字符串,支持所有字符串操作(如endswith()、下标访问)。
  • 修正判断逻辑:直接检查哈希字符串是否以"ffff"结尾,匹配需求。
  • 明确参数与返回值:将初始单词作为参数传入,返回最终字符串和对应的哈希值,方便验证结果。

优化建议(可选)

如果仅追加"a"可能需要极长时间才能找到符合条件的哈希,可以改为循环尝试不同小写字母,加快查找速度:

import string

# 替换原追加"a"的代码
char_index = (len(current_str) - len(initial_word)) % 26
current_str += string.ascii_lowercase[char_index]

内容的提问来源于stack exchange,提问作者BigBogBug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:58:19