PHP rand密码根据具体时间?

时间:2013-08-27 16:47:59

标签: php mysql security date passwords

我有一个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输出数字来访问我的管理区域网页。怎么可能这样做?就像一周前一样,我得到了一张新的HSBC安全卡,可以生成随机数并与服务器同步。使用PHP和Mysql这样做真的很难吗?

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

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

谢谢。

1 个答案:

答案 0 :(得分:2)

这些数字不是“随机的”,如果它们不存在,那么双方就不可能同时知道相同的数字。这些验证者令牌是OTP(一次性密码)设备。 Google已经创建了一个优秀的OTP服务开源实现:Google Authenticator。有许多语言的协议实现。

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

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