我在页面上有一个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/将有助于防止哈希冲突。
答案 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