4

我有一些实体(对象),每个实体都有一个 id(唯一)和一个名称。
当我想显示其中一个时,我有一个类似 www.domain.com/view/key:xxx 的 url。
键只是用base64_encode编码的实体的id,所以从url中不能直接看出id是什么。

我现在要做的(由于项目规范)是让密钥只包含数字和字母(base64_encode 提供类似于eyJpZCI6IjM2In0=eyJpZCI6IjM2In0%3D在 url 编码之后的结果)。

有一个简单的替代方案吗?这不是一个高安全性问题 - 可以通过多种方式显示 id - 我只需要一个仅包含由实体 ID 生成的字母和数字的密钥(可能与其名称相结合)解码给我回ID。

我发现的所有不同的编码方法也可以包含特殊字符。
这里有什么帮助吗?
提前致谢

4

2 回答 2

7

这个答案并没有真正应用加密,但因为你的问题也被标记为编码......

从 PHP 5 开始,您可以使用bin2hex

$s = base64_decode('eyJpZCI6IjM2In0=');
echo bin2hex($s);

输出:

7b226964223a223336227d

解码:

$s = hex2bin($data);

或者:

$s = pack('H*', $data);

顺便说一句,如果它id很敏感,您可能需要考虑防篡改作为全面加密的替代方案。


忘了提及如何使base64编码数据 URL 安全:

function base64_url_encode($input)
{
    return strtr(base64_encode($input), '+/=', '-_,');
}

function base64_url_decode($input)
{
    return base64_decode(strtr($input, '-_,', '+/='));
}
于 2012-06-09T14:48:41.487 回答
0

有许多 PHP 编码/解码函数。你可以在这里这里找到很多。

或者,只需去掉 base64_encode 末尾的 = 并将其添加到 PHP 代码中,以便 base64_decode 找到 ID。

于 2012-06-09T14:46:31.797 回答