使用Google身份验证应用进行双向身份验证

时间:2013-04-21 18:01:34

标签: authentication php

有人可以指导我实施Google身份验证应用时遇到的错误吗? 这是我尝试过没有成功的事情:

  

1#创建密钥

$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'; // allowed characters in Base32
$secret = ''; 
for ( $i = 0; $i < 16; $i++ )
{   $secret .= substr( $chars, mt_rand( 0, strlen( $chars ) - 1 ), 1 );  }
  

2#通过谷歌服务(描述+密钥)创建二维码,智能手机扫描,谷歌认证应用每30秒生成6位数

     

3#。现在我正在尝试验证它...([使用base32 algo] [1])

$tm = floor( time() / 30 );    // for time purpose  
$secretkey=Base32::decode($secretkey); // return blank
$time=chr(0).chr(0).chr(0).chr(0).pack('N*',$tm+$i);

// Hash it with users secret key
$hm = hash_hmac( 'SHA1', $time, $secretkey, true );

// Use last nipple of result as index/offset
$offset = ord(substr($hm,-1)) & 0x0F;

// grab 4 bytes of the result
$hashpart=substr($hm,$offset,4);

// Unpak binary value
$value=unpack("N",$hashpart);
$value=$value[1];

// Only 32 bits
$value = $value & 0x7FFFFFFF;
$value = $value % 1000000;

以上代码基于其他来源(wordpress google身份验证应用)......但它无效。

  

$秘密密钥= Base32 ::解码($秘密密钥);    始终返回空白(空)

还有其他方法可以验证或实施基于时间的算法吗?或者我可以阅读有关如何编写网站双向身份验证代码的链接?

感谢您前所未有的努力。 (我认为它是一个安全目的问题所以我放在这里而不是stackoverflow .. :))

1 个答案:

答案 0 :(得分:1)

使用github.com/chregu/GoogleAuthenticator.php

实施