You need to enable JavaScript to run this app. 校验BouncyCastle v1.66 BCrypt哈希误判密码相等的概率计算逻辑
优惠活动
大模型
产品
解决方案
定价
更多

校验BouncyCastle v1.66 BCrypt哈希误判密码相等的概率计算逻辑

推导过程的遗漏点说明

你的核心推导量级是准确的,最终千分之一左右的误判概率结论基本成立,但存在几处关键的简化偏差和逻辑遗漏:

1. 独立事件假设存在偏差

  • 计算9个有效区分字符的整体误判概率时,你直接将单个字符的不区分概率做9次幂运算,默认各字符的匹配事件相互独立。
  • 实际上,所有字符的出现、首次位置都是绑定在同一套共享字符串上的:一方面,22位公共盐值段内的字符出现是强关联的,一个字符只要在盐值段内出现,就会自动消除该字符的区分能力;另一方面,31位密码段内的多字符首次位置事件,也是绑定在同一对独立随机密码段上的,比如当两个密码段完全不含这9个字符时,所有字符会同时完成匹配,这种关联没法靠独立乘幂运算准确拟合。不过由于每个字符在整个字符串的占比很低,这部分带来的整体偏差不大。

2. 字符首次位置匹配概率W的简化偏差

  • 你直接假设,当两个密码段都存在某字符时,首次出现位置相同的概率是1/31,默认位置是均匀分布。
  • 实际上,字符在31位密码段内的首次出现位置是几何分布:越靠前的位置首次出现的概率越高,越靠后的位置概率越低。实际算下来,W的真实值约为0.033,和你估算的1/31≈0.032差不了多少,对最终结果的影响可以忽略。

3. 对无区分能力字符的核心逻辑认知不全

  • 你把$、0、1、2归为“首次出现位置固定”的无区分能力字符,本质原因是这些字符全部出现在两个字符串完全一致的公共前缀段内——无论算法标识、迭代轮次的具体取值是什么,两个待比较字符串的公共前缀是逐字符完全相同的,因此无论这些字符的首次位置落在哪,都不会触发不匹配。
  • 你的结论方向是对的,但没有意识到这种前缀一致性才是无区分能力的核心,而非位置永远固定:比如当轮次从常见的10调整为其他值时,部分字符的首次位置会发生变化,但仍然不会产生区分效果。

4. 公共段字符分布的边界假设偏差

  • 你计算Q值(盐值段不存在对应字符的概率)时,默认那9个有效区分字符(3456789./)不会出现在公共前缀的固定头、轮次段里,因此只统计了盐值段的字符分布。
  • 实际上当轮次取值为30-39区间时,代表数字3的字符会提前出现在轮次段的公共部分,直接消除这个字符的区分能力。这类边界场景带来的偏差不大,但确实没有被纳入之前的计算框架。

整体来看,上述遗漏带来的误差不会改变结论的量级,最终错误判定随机密码为正确的概率约千分之一的结果是可靠的。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 21:06:08