php - PHP 中的双向加密来混淆 ID?

标签 php url encryption hash

正在构建一个 PHP 网站,其 URL 结构如下:

http://www.domain.com/list/X/

X可以是 1 到 ~50m 之间的任何整数(我们拥有的记录数)。

由于网站的性质,内部需要让人们很难通过增加 URL 来自动提取数据,如下所示:

http://www.domain.com/list/1/
http://www.domain.com/list/2/
http://www.domain.com/list/3/
...
http://www.domain.com/list/50000000/

所以我正在考虑替换 X使用某种随机字符串,然后在后台进行内部查找以检索记录整数 ID。

我最初想做的是构建一个包含 50m 行的表,将整数映射到随机的 12 个字符的字符串。

但是为了让事情变得更有效率,我想到将整数附加到私钥,对其进行加密并使用加密的字符串代替 X 。然后我只需要解密字符串即可检索整数。

任何人都可以推荐一种在 PHP 中执行此操作的方法吗:

1) 快
2) 生成 URL 友好的字符
3) 结果是一个短字符串

我不关心无懈可击的安全性(这只是为了阻止爱好者)。

谢谢!

最佳答案

不要把事情搞得太复杂。您当前的 ID 是可猜测的,请通过将其替换为不可猜测 id 来解决这个问题。通过生成真正的随机数,您可以获得不可猜测的 id;不混淆现有的非随机数。 UUIDs非常适合此目的。只需在记录表中添加一个新列来存储这样的 UUID;也许甚至可以考虑直接用 UUID 替换整数 ID。

PECL 提供 uuid package ,但还有其他纯 PHP 实现。
您也可以简单地从 openssl_random_pseudo_bytes 生成一个随机值。和 bin2hexbase64_encode 它。

关于php - PHP 中的双向加密来混淆 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33255853/

相关文章:

php - opencart seo url重写

Android - 仅启用 URL 链接,但在触及 TextView 中的非 URL 链接时禁用其他链接

javascript - 具有客户端加密的 Web 应用程序

python - 属性错误 : 'str' object has no attribute 'decode' Having this error on the second line of my code

php - Symfony2,跨多个包访问同一个调度程序

javascript - 从输入文本字段获取数据,然后在同一页面上的 MySQL 语句中使用它

即使具有广泛开放的权限,PHP fopen() 也会在文件上失败

regex - 在 Cocoa 应用程序中验证用户输入的 URL 的最佳方法是什么?

php - 查询数据库中给定数组中的列值

c - 仅使用一些字符串操作和 <stdio.h> 进行加密