基于特定时间的PHP rand密码


PHP rand password based on specific time?

我有一个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数据库同步-也许-?以便访问管理区域。

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

谢谢。

这些数字不是"随机的",如果是,双方就不可能同时知道同一个数字。这些验证器令牌是OTP(一次性密码)设备。谷歌创建了一个伟大的OTP服务的开源实现:谷歌验证器。该协议有多种语言的实现。

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

关于这个的另一个好的、易于添加的实现,请参阅http://authy.com.