有人可以指导我实施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 .. :))
答案 0 :(得分:1)
使用github.com/chregu/GoogleAuthenticator.php
实施