我是否通过此解决方案避免了Hash冲突?

时间:2013-09-26 03:09:56

标签: javascript html

我在页面上有一个textarea元素,单击我创建的保存按钮后,它的内容将保存到我的数据库中。我想使用表格行的唯一ID(主键)创建包含“MySite.com/laHquq”等哈希ID的短网址,我保存包含textarea中信息的记录,并且:http://www.hashids.org/这将“从数字中产生短暂的哈希值(如YouTube和Bitly)。”我想使用它来混淆表行的唯一主键,其中包含来自textarea的信息的记录。

我将在地址栏中的域名末尾的正斜杠之后创建一个脚本来创建哈希id(这是混淆主键),因此地址栏现在将具有:“MySite。 com / laHquq“将信息保存到我的数据库之后。这样做只是为了表明现在通过在正斜杠后访问带有哈希id的站点,可以再次看到textarea中保存的信息。

我还将有一个带有自调用函数的脚本,每次页面加载时都会从地址栏中获取url,并在正斜杠后检查哈希id,然后使用哈希id从中查找正确的信息db显示在页面上的textarea中。我想知道是否使用哈希:http://www.hashids.org/将有助于防止哈希冲突。

2 个答案:

答案 0 :(得分:3)

从文档中看起来你永远不会遇到与hashid的冲突。那是因为它不是哈希。这是一个密码 - 一种加密算法。虽然非常弱,但足以生成看起来像哈希的ID。

一个关键线索是有一个decrypt功能。真正的哈希值,可以冲突的哈希值,无法解密为单个值,因为有多个值(通常是无限的)可以生成相同的哈希值。

在某些方面,它类似于base64编码,但选择的字符集是URL友好的(无+/)。

答案 1 :(得分:0)

发现了碰撞。

        'main' => [
            'salt' => 'KorvpalliSuuruneTennisePall666',
            'length' => '8',
            'alphabet' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',
        ],
Hashids::encode(250) results DoGxYxgJ
Hashids::encode(294) results DoGxYxgJ