当前位置: 首页 > news >正文

哈希碰撞概率计算

文章转载自我自己的小破站,欢迎大佬们进来瞧一瞧

数学推导

假如取值空间为 d d d,取值范围为 n n n,可得均不碰撞的概率为:

p ‾ ( n ) = 1 ⋅ ( 1 − 1 d ) ⋅ ( 1 − 2 d ) ⋯ ( 1 − n − 1 d ) \overline{p}(n) = 1 \cdot \Big(1 - \frac{1}{d}\Big) \cdot \Big(1 - \frac{2}{d}\Big) \cdots \Big(1 - \frac{n-1}{d}\Big) p(n)=1(1d1)(1d2)(1dn1)

推导可得,存在碰撞的概率为:

p ( n ) = 1 − p ‾ ( n ) p(n) = 1 - \overline{p}(n) p(n)=1p(n)

根据泰勒公式,指数函数 e x e^x ex 可以展开成多项式

e x = ∑ k = 1 ∞ x k k ! = 1 + x + x 2 2 + x 3 6 + ⋯ e^x = \sum_{k=1}^\infty \frac{x^k}{k!} = 1 + x + \frac{x^2}{2} + \frac{x^3}{6} + \cdots ex=k=1k!xk=1+x+2x2+6x3+

当 $ x \to 0$ 时,

e x ≈ 1 + x e^x \approx 1 + x ex1+x

代入 − 1 d -\dfrac{1}{d} d1可得:

e − 1 d ≈ 1 − 1 d e^{-\frac{1}{d}} \approx 1 -\frac{1}{d} ed11d1

代入 p ( n ) p(n) p(n) 可得:

p ( n , d ) ≈ 1 − e − n ( n − 1 ) 2 d p(n,d) \approx 1 - e^{ - \frac{n(n - 1)}{2d}} p(n,d)1e2dn(n1)

代码实现

const calculate = (d, n) => {
  const exponent = (-n * (n - 1)) / (2 * d)
  return 1 - Math.E ** exponent;
}

模拟场景

如果使用时间戳作为输入生成哈希值,发生哈希碰撞的概率是多少?

// qps = 1
calculate(1000, 1);  // 0
// qps = 38
calculate(1000, 38); // 0.5049022197190565
// qps = 50
calculate(1000, 50); // 0.7062422996764672

参考文献

[1] http://ruanyifeng.com/blog/2018/09/hash-collision-and-birthday-attack.html

相关文章:

  • 2021年超全中高级Java工程师面试题+答案
  • 阿里新产MySQL性能优化实践笔记,GitHub已获千万推荐
  • yolov5篇---官方ultralytics / yolov5代码复现,训练自己的数据集
  • avalanche 配置dns解析域名
  • 【Wordpress】wordpress根据需要DIY配置(更新中)
  • 遥感影像分类任务的复现
  • springboot+vue实现登录案例(附VUE整个项目代码)
  • 如何使用LOTO示波器 绘制 频率响应特性曲线?
  • 智能科学与技术——介绍概要
  • Controller设计--Kafka从入门到精通(十五)
  • 数据结构之查找和排序
  • CREO:CREO软件之工程图界面的【创建】、【布局】、【表】、【注释】的简介(图文教程)之详细攻略
  • .NET 回调、接口回调、 委托
  • 儒家思想发展历程
  • C程序设计基础-数据类型
  • 【EOS】Cleos基础
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  •  D - 粉碎叛乱F - 其他起义
  • FastReport在线报表设计器工作原理
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript设计模式系列一:工厂模式
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • mysql innodb 索引使用指南
  • MySQL数据库运维之数据恢复
  • mysql中InnoDB引擎中页的概念
  • Python连接Oracle
  • scala基础语法(二)
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • text-decoration与color属性
  • 复杂数据处理
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 理解在java “”i=i++;”所发生的事情
  • 前端攻城师
  • 三分钟教你同步 Visual Studio Code 设置
  • linux 淘宝开源监控工具tsar
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #pragma once与条件编译
  • (笔试题)分解质因式
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (力扣题库)跳跃游戏II(c++)
  • (转)一些感悟
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .libPaths()设置包加载目录
  • .naturalWidth 和naturalHeight属性,
  • .net CHARTING图表控件下载地址
  • .NET 表达式计算:Expression Evaluator
  • .net和php怎么连接,php和apache之间如何连接
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET企业级应用架构设计系列之开场白
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory