假设我有一个网址。
http://google.com ...我想把它变成哈希。 S3jvZLSDK。 然后拿这个哈希并反转它!进入http://google.com。
对你来说太棒了 - 对于近乎零的碰撞,最好的方法是什么?
答案 0 :(得分:16)
如果你可以反转它,那么根据定义它不是哈希。这是一种编码。任何编码都将具有零冲突(否则它将无法准确地反转它)。
用于此目的的常见编码是base64。
答案 1 :(得分:8)
散列的重点是它不可逆(没有蛮力,在输出匹配之前尝试所有可能的输入)。
这是否适用于URL缩短服务?通常的方法是将http://google.com
存储在一个唯一键下的数据库中,当有人用该键查询时(如果你真的喜欢随机字符串,那么可能是'S3jvZLSDK',但可能很容易' 1')你再次吐出你记得的价值。
答案 2 :(得分:4)
你是想写一个像URL shortener这样的东西吗?如果是这样,只需生成一个随机字符串,然后使用大型哈希表,关系数据库(带索引)等将密钥(S3jvZLSDK)与URL(google.com)相关联,反之亦然。
这将为您提供处理冲突的简单解决方案(密钥已存在,URL已存在)和快速查找。
答案 3 :(得分:0)
无法获得接近零的冲突,但如果使用具有大输出大小的加密哈希,则可以任意进行冲突。 SHA-2系列包含一个512位密钥的版本;那应该是你。