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

哈希值末尾四位需相同的编码挑战及UTF-8编码报错问题

解决哈希后缀编码问题的方案

问题原因

你遇到的UnicodeEncodeError是因为chr(i)生成了U+D800到U+DFFF之间的代理字符,这类字符属于Unicode代理区,必须成对出现才能被UTF-8编码,单独使用时会触发编码失败。

方案1:跳过无效Unicode代理字符

直接在循环中排除代理区的码点,只生成可被UTF-8有效编码的字符:

import hashlib

def find_hash_flag(word):
    # 遍历所有有效Unicode码点(U+0000到U+10FFFF),跳过代理区
    for i in range(0x110000):
        if 0xD800 <= i <= 0xDFFF:
            continue
        new_word = word + chr(i)
        hashed = hashlib.sha256(new_word.encode('utf-8')).hexdigest()
        if hashed[-4:] == "eeee":
            print(hashed)
            return new_word
    # 若单个字符找不到,可扩展为多字符后缀(长度≤1024)
    return None

word = "orthosemidin"
modified_word = find_hash_flag(word)

if modified_word:
    print(modified_word)
else:
    print("you failed miserably")

方案2:直接操作字节串(推荐,更高效)

哈希函数本质处理的是字节序列,我们可以直接在原单词的UTF-8字节后追加合法的UTF-8字节序列,完全绕开Unicode字符的编码问题:

import hashlib

def find_hash_flag(word):
    word_bytes = word.encode('utf-8')
    # 先尝试追加1个单字节UTF-8字符(0-127,均合法)
    for b in range(128):
        new_bytes = word_bytes + bytes([b])
        hashed = hashlib.sha256(new_bytes).hexdigest()
        if hashed[-4:] == "eeee":
            print(hashed)
            return new_bytes.decode('utf-8')
    # 单个字节找不到时,尝试2字节合法UTF-8序列
    for b1 in range(0xC0, 0xE0):
        for b2 in range(0x80, 0xC0):
            new_bytes = word_bytes + bytes([b1, b2])
            hashed = hashlib.sha256(new_bytes).hexdigest()
            if hashed[-4:] == "eeee":
                print(hashed)
                return new_bytes.decode('utf-8')
    # 可继续扩展到更多字节,确保总后缀字节数≤1024(对应UTF-8字符串长度≤256)
    return None

word = "orthosemidin"
modified_word = find_hash_flag(word)

if modified_word:
    print(modified_word)
else:
    print("you failed miserably")

方案优势

  • 方案2直接操作字节,避免了Unicode字符的编码转换开销,运行效率更高。
  • 两种方案都严格遵守UTF-8编码要求,同时满足后缀长度不超过1024的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:44:52