PHP 如何使 Youtube 的 url 像 id 一样?

PHP how to make Youtube like id's for urls?

我正在制作一个人们可以发布 post 的网站。在我的数据库中,每个 post 都有一个 ID,如 1、2、3 等,但我想更改它们,就像使用像 Youtube 那样的哈希。

例如 http://localhost/post/1

他们会去 http://localhost/post/hu9NA827z

有没有像散列和解码这样的方法?

由于不需要此散列的安全性,您可以只使用 PHP 内置散列函数 md5()。我建议使用时间戳作为输入:

$id = md5(time());

只是将其截断以使其更短。我建议您将原始主键保留为自增整数并将此散列添加为新列。

好吧,虽然您可以 encrypt/decrypt 但这没有多大意义(您会让它变慢而没有任何实际好处)。 您可以做的是让数据库中的主键成为一个字符串并为 id 生成一个散列或添加一个具有唯一索引的新列,将散列保存在那里并通过散列搜索 posts列(并且可能出于内部目的保留 id)。您可以使用复杂的算法或仅使用 md5(uniqid()),因为这不是为了安全起见,我不会太担心。确保在创建新 post 时不违反唯一性。现在你有另一个插入失败的原因(散列不是唯一的)所以为此做好准备。

检查: http://php.net/manual/en/function.md5.php http://php.net/manual/en/function.uniqid.php

序列hu9NA827z是BASE64。解码它,你得到一个6字节的二进制序列。

例如:

base64_encode('123456') // = 'MTIzNDU2'
base64_decode('MTIzNDU2') // = '123456'

然而,在YouTube上,BASE64并没有被用来保护信息,其目的只是将其序列化为人类可读的ASCII格式。其背后真正的信息是一个48位的二进制序列。

这个二进制序列可能是数据库中视频 ID 的加密版本,但只有 YouTube 开发人员确切知道它的真实情况,他们当然希望它保持这种状态。

在您的情况下,您可以简单地使用 PHP 中提供的许多双向加密方法之一实现类似的系统,例如 MCrypt,它支持您选择的许多加密算法,包括非常安全的 AES。