有人可以指导我在实施 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 .. :))