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

受限字符串SHA1哈希的碰撞概率计算及最小化n的技术问询

Calculating Collision Probability for Your SHA1 Hashing Scenario

Let's break this down step by step, since we're dealing with a specific input space, SHA1 hashing, and the goal of minimizing n (likely the number of hash bits you'll use) while keeping collision risk in check.

First, let's lock in our key variables:

  • x: Total possible input strings. Your inputs are 64 characters long, with 62 options per character (10 digits + 26 lowercase + 26 uppercase letters). That means x = 62^64—this is an enormous number, way bigger than SHA1's full 160-bit hash space (2^160).
  • n: The number of bits we'll use from the SHA1 output (we want the smallest n possible while keeping collisions acceptable). The hash space for n bits is 2^n.

The Core Idea: Birthday Paradox

Hash collision probability boils down to the birthday problem. Here's the practical, simplified version: if you have k items picked from a space of size S, the probability of at least one collision can be approximated (when k is much smaller than S) with this formula:

Collision Probability ≈ k*(k-1)/(2*S)

For most real-world cases where k is large, k-1 is almost identical to k, so we can simplify this to:

Collision Probability ≈ k²/(2*S)

Applying This to Your Setup

Now let's map this to your x and n values:

Scenario 1: Input set size x ≤ hash space 2^n

If you're using every unique input once, plug k = x and S = 2^n into the approximation:

P ≈ x²/(2*2^n) = x²/(2^(n+1))

If you're only sampling a smaller subset of m inputs (where m ≤ x), just swap x with m in the formula.

Scenario 2: Input set size x > hash space 2^n

Here, collisions are guaranteed by the pigeonhole principle—you have more unique inputs than unique hash values. But if you're only working with a subset m of inputs (where m ≤ 2^n), you still use the birthday approximation with k = m and S = 2^n.

Minimizing n for Acceptable Collision Risk

To find the smallest n that keeps collision probability below your desired threshold (say, P_max), rearrange the approximation formula:

n ≥ log2(x²/(2*P_max)) = 2*log2(x) - log2(2*P_max)

Since x = 62^64, log2(x) ≈ 64 * 5.954 = 381.056 (because log2(62) is roughly 5.954). For example, if you want a collision probability of ≤ 1e-9, plugging that in gives:

n ≥ 2*381.056 - log2(2*1e-9) ≈ 762.11 - (-29.9) ≈ 792 bits

That's way larger than SHA1's 160 bits, which makes sense given how massive your input set is. If you're only dealing with a smaller subset of inputs, replace x with your subset size m in the calculation to get a smaller, more feasible n.


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:12:03