ThomasHartDev/HashAttack

GitHub: ThomasHartDev/HashAttack

使用 Java 对截断 SHA-1 执行暴力原像攻击和碰撞攻击,以经验数据验证生日界限理论预期。

Stars: 0 | Forks: 0

# HashAttack 使用 Java 对截断的 SHA-1 摘要进行暴力原像攻击和碰撞攻击,并测量不同输出位长度下的结果。 ## 这展示了什么 破解哈希的成本取决于你保留了多少输出位。将 SHA-1 截断为少量位会使这两种攻击变得可行,这让你能够观察到生日界限的实际作用:原像攻击的规模为 2^n,碰撞攻击的规模为 2^(n/2)。它对截断为指定位长度的 SHA-1 运行这两种攻击,计算每种攻击所需的哈希求值次数,并重复 50 次,以便将计数与理论预期进行平均比较。包含的 PDF 是分析结果的报告。 ## 展示的概念 - 原像攻击:搜索随机输入,直到其中一个哈希值等于固定的目标摘要(预期工作量约为 2^n) - 碰撞攻击:对不断增长的序列进行哈希处理,直到两个输入共享同一摘要(根据生日界限,预期工作量约为 2^(n/2)) - 将 SHA-1 摘要截断为任意位长度,包括通过计算位掩码实现的子字节长度 - 对最后一个部分字节进行位掩码处理,以便比较在完全精确的 `numBits` 分辨率下进行 - 经验测量:每次运行 50 次试验,计算哈希求值次数以与理论界限进行比较 ## 实现内容 - `HashAttack.java` 实现了 `preImageAttack` 和 `collisionAttack`、截断与位掩码逻辑 (`getBitMask`)、随机字符串生成,以及通过 `MessageDigest` 进行 SHA-1 哈希处理。 - `Main.java` 解析参数并运行所选攻击 50 次。 ## 技术栈 - Java(使用 `java.security.MessageDigest` 处理 SHA-1) ## 用法 从 `HashAttack/src/` 编译并运行: ``` javac Main.java java Main <-p | -c> [-v] ``` - `numBits` 是以位为单位的截断摘要长度 - `-p` 运行原像攻击,`-c` 运行碰撞攻击 - `-v` 打印每次迭代的目标/攻击比较 每次运行都会将攻击重复 50 次,并打印每次所用的迭代次数。有关完整的分析,请参阅 `Project 2 -- Hash Attack.pdf`。
标签:JS文件枚举, PoC, 哈希算法, 域名枚举, 密码学, 手动系统调用, 暴力破解