如何逆向指定自定义hash函数,根据输出结果反推符合要求的输入字符串
逆向推导原理
这个哈希函数属于线性递推计算,每一步操作完全可逆,本质是变种的43进制转换:
正向每轮计算公式为 h_new = h_old * 43 + v,其中v是当前字符在letters中的索引,取值范围为0~17(小于43)。
反向推导时,每轮只需对当前的哈希值取43的余数,就能直接得到当前位对应的v,再将哈希值更新为(h - v) // 43,重复操作直到哈希值回到初始值3即可,最终得到的索引序列反转后就是原输入字符串。
实际计算结果
针对目标哈希值1509979332193868,推导得到的输入字符串为 wajjhkups,正向代入原哈希函数计算可验证输出和目标值完全一致。
参考实现代码
你可以直接运行下面的代码完成任意哈希值的反推:
letters = 'weiojpknasdjhsuert' def reverse_hash(target_hash): h = target_hash chars = [] while h != 3: v = h % 43 chars.append(letters[v]) h = (h - v) // 43 # 反转得到正序输入 return ''.join(reversed(chars)) print(reverse_hash(1509979332193868)) # 输出:wajjhkups
内容的提问来源于stack exchange,提问作者mchd
相关产品推荐
相关产品推荐

