将url映射到随机端口范围

时间:2012-03-20 22:29:10

标签: php random port sha1

我试图将网址映射到范围[0,50]中用于移植的数字,这应该在范围内均匀分布,以便不会对端口进行锤击。

下面是我的代码,但我可以弄清楚为什么模数对我不起作用。

    $fetch_url = "http://74.125.224.72/profile/user";   
    $hash = sha1($fetch_url);
    $hasher = substr($hash,1,50);
    $port_index = hexdec($hasher)%50;
    $port = 8700 + $port_index;

似乎一切都符合返回0的$ port_index。请记住,“user”是每次都不同的实际用户名。

最终目标如下:

    http://74.125.224.72/profile/j - port = 8701
    http://74.125.224.72/profile/m - port = 8702
    http://74.125.224.72/profile/p - port = 8703

每次用户登录并点击他们的个人资料时都应如此。

有什么想法吗?

由于 -J

1 个答案:

答案 0 :(得分:1)

我认为问题是sha1哈希的十六进制转换是如此巨大,以至于PHP有点停止将其作为数字处理。你应该修剪哈希和hexdec的最后几个字符。看起来你可能一直在试用你的substr,但sha1是40个字符,你做了50个子字符。 50那是一个错误吗?

因此,hexdec会返回类似'5.4627305075531E + 46'的内容,这些内容无法正常运行。尝试:

$fetch_url = "http://74.125.224.72/profile/user";   
$hash = sha1($fetch_url);
$hasher = substr($hash,-5); // get last 5
$port_index = hexdec($hasher)%50;
$port = 8700 + $port_index;