AI编程助手
AI免费问答

PHP实现OATH动态口令算法的示例代码分享

黄舟   2017-03-22 10:07   2227浏览 原创

PHP实现OATH动态口令算法的示例代码分享

<?PHP   
/** 
 * This program is free software: you can redistribute it and/or modify 
 * it under the terms of the GNU General Public License as published by 
 * the Free Software Foundation, either version 3 of the License, or 
 * (at your option) any later version. 
 * 
 * This program is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 * GNU General Public License for more details. 
 * 
 * You should have received a copy of the GNU General Public License 
 * along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 * 
 * PHP Google two-factor authentication module. 
 * 
 * See http://www.idontplaydarts.com/2011/07/google-totp-two-factor-authentication-for-php/ 
 * for more details 
 * 
 * @author Phil 
 **/  
  
class Google2FA {  
  
    const keyRegeneration     = 30;    // Interval between key regeneration  
    const otpLength        = 6;    // Length of the Token generated  
  
    private static $lut = array(    // Lookup needed for Base32 encoding  
        "A" => 0,    "B" => 1,  
        "C" => 2,    "D" => 3,  
        "E" => 4,    "F" => 5,  
        "G" => 6,    "H" => 7,  
        "I" => 8,    "J" => 9,  
        "K" => 10,    "L" => 11,  
        "M" => 12,    "N" => 13,  
        "O" => 14,    "P" => 15,  
        "Q" => 16,    "R" => 17,  
        "S" => 18,    "T" => 19,  
        "U" => 20,    "V" => 21,  
        "W" => 22,    "X" => 23,  
        "Y" => 24,    "Z" => 25,  
        "2" => 26,    "3" => 27,  
        "4" => 28,    "5" => 29,  
        "6" => 30,    "7" => 31  
    );  
  
    /** 
     * Generates a 16 digit secret key in base32 format 
     * @return string 
     **/  
    public static function generate_secret_key($length = 16) {  
        $b32     = "234567QWERTYUIOPASDFGHJKLZXCVBNM";  
        $s     = "";  
  
        for ($i = 0; $i = 8) {  
                $j = $j - 8;  
                $binary .= chr(($n & (0xFF > $j);  
            }  
        }  
  
        return $binary;  
    }  
  
    /** 
     * Takes the secret key and the timestamp and returns the one time 
     * password. 
     * 
     * @param binary $key - Secret key in binary form. 
     * @param integer $counter - Timestamp as returned by get_timestamp. 
     * @return string 
     **/  
    public static function oath_hotp($key, $counter)  
    {  
        if (strlen($key) 

上面的内容保存为oath.php,测试运行有两种方法:

1、运行命令行:php.exe  oath.php

      路径问题大家懂得

2、部署在web目录下,通过网页访问

      例如:http://localhost/oath.php

php免费学习视频:立即学习
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。