-1

我有一个 localhost php mysql 销售点(windows),我发现这段代码是关于rand根据指定时间(每分钟)生成数字:这是代码:

<?php
class Random {

    // random seed
    private static $RSeed = 0;

    //set seed
    public static function seed($s = 0) {
        self::$RSeed = abs(intval($s)) % 9999999 + 1;
        self::num();
    }


    // generate random number
    public static function num($min = 0, $max = 9999999) {
        if (self::$RSeed == 0) self::seed(mt_rand());
        self::$RSeed = (self::$RSeed * 125) % 2796203;
        return self::$RSeed % ($max - $min + 1) + $min;
    }

}


// set seed
Random::seed(check_time());

// echo 10 numbers between 1 and 100
for ($i = 0; $i < 10; $i++) {
    echo Random::num(1, 100) . '<br />';
}


function check_time(){
echo "Your Time is = ".date('h:i:s')."<br />";
if (date('i')) {
   return date('i');
}
}

?>

现在这完美无缺,但这不是我真正需要的。我正在寻找使用rand输出数字访问我的管理区域网页的想法。怎么可能呢?就像一周前一样,我得到了一张新的汇丰安全卡,它会生成随机数并与他们的服务器同步。用 PHP 和 Mysql 做这样的事情真的很难吗?

作为澄清我想要什么的结论,我需要每分钟生成一个随机数,并且应该与 mysql db 同步-也许-?为了访问管理区域。

我正在寻找与这个想法相处的第一步,抱歉我不熟悉 PHP 安全性!

谢谢你。

4

1 回答 1

2

这些数字不是“随机的”,如果它们是的话,两方就不可能同时知道同一个数字。这些身份验证器令牌是 OTP(一次性密码)设备。Google 创建了一个出色的 OTP 服务的开源实现:Google Authenticator。该协议有多种语言的实现。

该系统依赖于两方交换一次共享秘密。设置时,服务器会生成一个秘密,您的手机或其他设备会获取此秘密;通常通过扫描二维码。现在,两台机器都会根据最初的秘密和当前时间生成一个看似不可预测的数字。

对于另一个不错的、易于添加的实现,请参见http://authy.com

于 2013-08-27T16:54:57.717 回答