algorithm - 128 位哈希保证无冲突
问题描述
是否有保证不会发生冲突的 128 散列算法(无论是加密还是非加密散列)?
如果可以保证我的字符串不会超过特定长度(有这样的长度吗?-我可以保证长度小于 100 个字符)
解决方案
不,你不能做出这样的算法。如果你有一个100 个字符的字符串,你有(让字符在1..255
范围内)
256**100 == (2**8)**100 == 2**800
不同的字符串(潜在的冲突);128位散列函数只有2**128
不同的值,因为
2**128 < 2**800
碰撞是不可避免的:鸽子洞原理
编辑:假设我们有128
-bit 功能;可以无冲突的字符串的最大长度是多少?
256**length = 2**128
(2**8)**length = 2**128
8 * length = 128
length = 16
所以最大长度是16
(为了简单起见,我假设字符串不包含'\0'
)。如果字符串是一个 unicode 字符串(即1..65535
范围内有字符)
65536**length = 2**128
(2**16)**length = 2**128
16 * length = 128
length = 8
推荐阅读
- ios - 向 Firebase 中的其他用户发送预先编写的应用内用户通知
- macos - 如何为 Docker mac 删除磁盘上的图像?
- html - 什么是 html 页面大小限制
- c# - 从其他应用程序获取 sln 文件
- airflow - 气流:当变量不存在且无异常时在代码中设置默认值
- python - 将用户输入传递给 python 子进程是否危险?
- javascript - Issue with action and onsubmit in form
- css - 使用 CSS:如何对透明背景进行径向擦除过渡或动画
- oracle - 使用参数执行存储过程并在一个或另一个表上插入
- sql - 从 SQL 数据库中检索值 - EF