【发布时间】:2013-09-21 11:14:46
【问题描述】:
为什么我会从我的函数中得到这个输出?
echo $var = hash_hmac('ripemd160', 'http://www.weburlhere.org', 0, 0);
echo "\r\n";
echo $converted = base_convert($var, 16, 2);
echo "\r\n";
输出:
407a9d8868a678e12d9fc0264f9ae11e8761b557
0000000000000000000000000000000000000000000000000000000000000000
而base_convert($var, 16, 10) 输出
1421821959848150668406846884086820088622688484226 正确。
另外,作为一个附带问题(对此有加分!)我假设ripemd160 为我提供了每个输入原像的唯一标识符。我正在尝试创建一个 url-shortening 服务,将 URL 从任何长度缩短为其哈希摘要(我假设使用 base64_encode($converted) 将二进制文件转换为 base64 将进一步缩短 URL)。这是正确的,这是个好主意吗?
【问题讨论】:
-
您为什么使用
hash_hmac。有必要吗 -
从 URL 派生一个简短且唯一的值(例如哈希)不会很好。在某个地方保留一个计数器会更容易,并且 base-36(以避免大小写冲突)对其进行哈希处理以使其尽可能短。我不知道二进制数是如何进入其中的,但是......
-
我认为 base64 编码会提供更短的 URL,所以我必须先将十六进制转换为二进制,因为
base64_encode需要二进制输入数据(或者我是这么认为的)。 -
@bvpx,Sverri M. Olsen 的想法是自动递增编号(数据库中的 ID),并将 ID 转换为更高的基数(可以是 base64)以提供更短的链接而不是散列URL 并将其用作 ID。
-
哈希的使用在我的应用程序中有一个目的,这与本次讨论有点无关,无论如何也不适合评论框的范围。
标签: php encoding hash base hmac