【问题标题】:Mapping url to random port range将 url 映射到随机端口范围
【发布时间】:2012-03-20 22:29:10
【问题描述】:

我正在尝试将 url 映射到 [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。请记住,“用户”是每次都不同的实际用户名。

最终目标写在下面:

    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

【问题讨论】:

    标签: php random port sha1


    【解决方案1】:

    我认为问题在于 sha1 哈希的 hexdec 转换是如此之大,以至于 PHP 有点停止将其作为数字处理。您应该只剪掉哈希的最后几个字符和十六进制。看起来您可能一直在尝试使用 substr,但 sha1 是 40 个字符,而您做了 50 个 substr。 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;
    

    【讨论】:

    • 做到了。谢谢kingcoyote。
    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 2020-03-03
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    相关资源
    最近更新 更多