我正在建立一个人们可以发布帖子的网站。在我的数据库中,每个帖子都有一个ID,如1,2,3等,但我想改变它们,就像使用像Youtube一样的哈希。
例如,而不是http://localhost/post/1
他们会去http://localhost/post/hu9NA827z
是否有一种方法可以对数字进行哈希处理并对其进行解码?
答案 0 :(得分:1)
由于不需要此哈希是安全的,因此您可以使用PHP内置哈希函数md5()
。我建议使用时间戳作为输入:
$id = md5(time());
只需截断它即可缩短它。我建议你保留原始主键的自动增量整数,并将此哈希添加为新列。
答案 1 :(得分:1)
好吧,虽然你可以加密/解密它没有多大意义(你会让它变慢而没有任何实际好处)。 你可以做的是让你的数据库中的主键成为一个字符串并为id生成一个哈希值或添加一个带有唯一索引的新列,保存哈希值并通过哈希列搜索帖子(并且可能保留内部用途的id)。你可以使用复杂的算法或md5(uniqid()),因为这不是为了安全,我不会太担心。确保在创建新帖子时,不会违反唯一性。现在你有另一个原因导致插入失败(散列不是唯一的),所以要做好准备。
检查: http://php.net/manual/en/function.md5.php http://php.net/manual/en/function.uniqid.php
答案 2 :(得分:0)
序列hu9NA827z
是BASE64。解码它,你得到一个6字节的二进制序列。
例如:
base64_encode('123456') // = 'MTIzNDU2'
base64_decode('MTIzNDU2') // = '123456'
然而,在YouTube上,BASE64并未用于保护信息,其纯粹的目的只是将其序列化为人类可读的ASCII格式。它背后的真实信息是48位二进制序列。
这个二进制序列可能是数据库中视频ID的加密版本,但实际上只有YouTube开发人员确切知道,他们当然希望它保持这种状态。
在您的情况下,您可以使用PHP中提供的许多双向加密方法之一来实现类似的系统,如MCrypt,它支持您选择的许多加密算法,包括非常安全的AES。 / p>