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

Python实现SHA512衍生8位哈希函数碰撞查找及计时功能求助

哈希碰撞计时功能实现方案

原有代码问题

你代码中调用的time.timer(result)属于错误用法,Python标准time库没有该接口,无法完成计时统计。

修改逻辑

  • 在哈希生成循环开始前,使用高精度计时器time.perf_counter()记录启动时间戳,该接口精度远高于普通时间戳,适合短耗时场景统计
  • 每次检测到碰撞时,再次读取当前时间戳,和启动时间戳做差即可得到从程序启动到发现本次碰撞的总耗时
  • 可选优化:你当前仅循环10次几乎不可能触发碰撞,若使用4字节(32位)截断哈希需要约6.5万次采样才有可能出现碰撞,可按需调整循环次数,或修改为无限循环直到找到目标数量的碰撞后退出

修改后完整代码

import hashlib
import os
import time

lookup_table = {}
collision_counts = 0
# 记录程序启动时间
start_time = time.perf_counter()

# 可以把range的数值改大,比如改成1000000,或者直接用while True无限循环直到碰撞
for value in range(1000000):
    random_binary = os.urandom(8)
    result = hashlib.sha512(random_binary).digest()
    # 如果你需要的是8位(1字节)哈希,把切片改成result[:1]即可,碰撞概率会大幅提升
    result = result[:4]
    if result in lookup_table:
        # 计算当前碰撞的耗时,保留4位小数
        cost_time = round(time.perf_counter() - start_time, 4)
        print("发现碰撞")
        print(f"碰撞值1:{lookup_table[result]},哈希结果:{result}")
        print(f"碰撞值2:{random_binary},哈希结果:{result}")
        print(f"本次查找耗时:{cost_time} 秒")
        collision_counts += 1
        # 如果只需要找1次碰撞,找到后可以直接break退出循环
        # break
    else:
        lookup_table[result] = random_binary

print("总碰撞次数:", collision_counts)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:06:10