2013-08-27 14 views
-1

我已经出售的本地主机的PHP MySQL的点(窗口),我发现这个代码是关于基于指定时间(每分钟)生成rand编号: 以下是代码:基于特定时间的PHP 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安全性!

谢谢。

+1

存储随机数等?这不是一个好方法。你想实现这个:http://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm - 作为一个起点,你可以看看谷歌身份验证源代码:http://code.google.com/p /谷歌认证/ – ThiefMaster

+0

@ThiefMaster将阅读有关,感谢您的帮助! – Alihamra

回答

2

这些数字不是“随机的”,如果他们是没有办法的话,那么双方就不可能同时知道相同的数字。这些验证器令牌是OTP(一次性密码)设备。 Google已经创建了OTP服务的一个很好的开源实现:Google Authenticator。该协议有多种语言的实现。

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

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