1

有人可以指导我在实施 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 算法][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 authentication app)......但它不起作用。

$secretkey=Base32::decode($secretkey); 总是返回空白(空)

是否有另一种方法来验证或实施基于时间的算法?或者一个链接,我可以在其中阅读有关如何为站点的 2 路身份验证编码的信息?

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

4

1 回答 1

1

使用 github.com/chregu/GoogleAuthenticator.php 实现

于 2013-05-10T08:00:36.263 回答