password.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 477 行

PHP
477
字号
<?php/* vim: set expandtab tabstop=4 shiftwidth=4: */// +----------------------------------------------------------------------+// | PHP Version 4                                                        |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2003 The PHP Group                                |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license,      |// | that is bundled with this package in the file LICENSE, and is        |// | available at through the world-wide-web at                           |// | http://www.php.net/license/2_02.txt.                                 |// | If you did not receive a copy of the PHP license and are unable to   |// | obtain it through the world-wide-web, please send a note to          |// | license@php.net so we can mail you a copy immediately.               |// +----------------------------------------------------------------------+// | Authors: Martin Jansen <mj@php.net>                                  |// |          Olivier Vanhoucke <olivier@php.net>                         |// +----------------------------------------------------------------------+//// $Id: Password.php,v 1.7 2003/04/03 11:37:19 mj Exp $///** * Number of possible characters in the password */$_Text_Password_NumberOfPossibleCharacters = 0;/** * Create passwords * * @package Text_Password * @author  Martin Jansen <mj@php.net> * @author  Olivier Vanhoucke <olivier@php.net> */class Text_Password {    /**     * Create a single password.     *     * @access public     * @param  integer Length of the password.     * @param  string  Type of password (pronounceable, unpronounceable)     * @param  string  Character which could be use in the     *                 unpronounceable password ex : 'A,B,C,D,E,F,G'     *                 or numeric or alphanumeric.     * @return string  Returns the generated password.     */    function create($length = 10, $type = 'pronounceable', $chars = '')    {        mt_srand((double) microtime() * 1000000);        switch ($type) {        case 'unpronounceable' :            return Text_Password::_createUnpronounceable($length, $chars);        case 'pronounceable' :        default :            return Text_Password::_createPronounceable($length);        }    }    /**     * Create multiple, different passwords     *     * Method to create a list of different passwords which are     * all different.     *     * @access public     * @param  integer Number of different password     * @param  integer Length of the password     * @param  string  Type of password (pronounceable, unpronounceable)     * @param  string  Character which could be use in the     *                 unpronounceable password ex : 'A,B,C,D,E,F,G'     *                 or numeric or alphanumeric.     * @return array   Array containing the passwords     */    function createMultiple($number, $length = 10, $type = 'pronounceable', $chars = '')    {        $passwords = array();        while ($number > 0) {            while (true) {                $password = Text_Password::create($length, $type, $chars);                if (!in_array($password, $passwords)) {                    $passwords[] = $password;                    break;                }            }            $number--;        }        return $passwords;    }    /**     * Create password from login     *     * Method to create password from login     *     * @access public     * @param  string  Login     * @param  string  Type     * @param  integer Key     * @return string     */    function createFromLogin($login, $type, $key = 0)    {        switch ($type) {        case 'reverse':            return strrev($login);        case 'shuffle':            return Text_Password::_shuffle($login);        case 'xor':            return Text_Password::_xor($login, $key);        case 'rot13':            return str_rot13($login);        case 'rotx':            return Text_Password::_rotx($login, $key);        case 'rotx++':            return Text_Password::_rotxpp($login, $key);        case 'rotx--':            return Text_Password::_rotxmm($login, $key);        case 'ascii_rotx':            return Text_Password::_asciiRotx($login, $key);        case 'ascii_rotx++':            return Text_Password::_asciiRotxpp($login, $key);        case 'ascii_rotx--':            return Text_Password::_asciiRotxmm($login, $key);        }    }    /**     * Create multiple, different passwords from an array of login     *     * Method to create a list of different password from login     *     * @access public     * @param  array   Login     * @param  string  Type     * @param  integer Key     * @return array   Array containing the passwords     */    function createMultipleFromLogin($login, $type, $key = 0)    {        $passwords = array();        $number    = count($login);        $save      = $number;        while ($number > 0) {            while (true) {                $password = Text_Password::createFromLogin($login[$save - $number], $type, $key);                if (!in_array($password, $passwords)) {                    $passwords[] = $password;                    break;                }            }            $number--;        }        return $passwords;    }    /**     * Helper method to create password     *     * Method to create a password from a login     *     * @access private     * @param  string  Login     * @param  integer Key     * @return string     */    function _xor($login, $key)    {        $tmp = '';        for ($i = 0; $i < strlen($login); $i++) {            $next = ord($login{$i}) ^ $key;            if ($next > 255) {                $next -= 255;            } elseif ($next < 0) {                $next += 255;            }            $tmp .= chr($next);        }        return $tmp;    }    /**     * Helper method to create password     *     * Method to create a password from a login     * lowercase only     *     * @access private     * @param  string  Login     * @param  integer Key     * @return string     */    function _rotx($login, $key)    {        $tmp = '';        $login = strtolower($login);        for ($i = 0; $i < strlen($login); $i++) {            if ((ord($login{$i}) >= 97) && (ord($login{$i}) <= 122)) { // 65, 90 for uppercase                $next = ord($login{$i}) + $key;                if ($next > 122) {                    $next -= 26;                } elseif ($next < 97) {                    $next += 26;                }                $tmp .= chr($next);            } else {                $tmp .= $login{$i};            }        }        return $tmp;    }    /**     * Helper method to create password     *     * Method to create a password from a login     * lowercase only     *     * @access private     * @param  string  Login     * @param  integer Key     * @return string     */    function _rotxpp($login, $key)    {        $tmp = '';        $login = strtolower($login);        for ($i = 0; $i < strlen($login); $i++, $key++) {            if ((ord($login{$i}) >= 97) && (ord($login{$i}) <= 122)) { // 65, 90 for uppercase                $next = ord($login{$i}) + $key;                if ($next > 122) {                    $next -= 26;                } elseif ($next < 97) {                    $next += 26;                }                $tmp .= chr($next);            } else {                $tmp .= $login{$i};            }        }        return $tmp;    }    /**     * Helper method to create password     *     * Method to create a password from a login     * lowercase only     *     * @access private     * @param  string  Login     * @param  integer Key     * @return string     */    function _rotxmm($login, $key)    {        $tmp = '';        $login = strtolower($login);        for ($i = 0; $i < strlen($login); $i++, $key--) {            if ((ord($login{$i}) >= 97) && (ord($login{$i}) <= 122)) { // 65, 90 for uppercase                $next = ord($login{$i}) + $key;                if ($next > 122) {                    $next -= 26;                } elseif ($next < 97) {                    $next += 26;                }                $tmp .= chr($next);            } else {                $tmp .= $login{$i};            }        }        return $tmp;    }    /**     * Helper method to create password     *     * Method to create a password from a login     *     * @access private     * @param  string  Login     * @param  integer Key     * @return string     */    function _asciiRotx($login, $key)    {        $tmp = '';        for ($i = 0; $i < strlen($login); $i++) {            $next = ord($login{$i}) + $key;            if ($next > 255) {                $next -= 255;            } elseif ($next < 0) {                $next += 255;            }            $tmp .= chr($next);        }        return $tmp;    }    /**     * Helper method to create password     *     * Method to create a password from a login     *     * @access private     * @param  string  Login     * @param  integer Key     * @return string     */    function _asciiRotxpp($login, $key)    {        $tmp = '';        for ($i = 0; $i < strlen($login); $i++, $key++) {            $next = ord($login{$i}) + $key;            if ($next > 255) {                $next -= 255;            } elseif ($next < 0) {                $next += 255;            }            $tmp .= chr($next);        }        return $tmp;    }    /**     * Helper method to create password     *     * Method to create a password from a login     *     * @access private     * @param  string  Login     * @param  integer Key     * @return string     */    function _asciiRotxmm($login, $key)    {        $tmp = '';        for ($i = 0; $i < strlen($login); $i++, $key--) {            $next = ord($login{$i}) + $key;            if ($next > 255) {                $next -= 255;            } elseif ($next < 0) {                $next += 255;            }            $tmp .= chr($next);        }        return $tmp;    }    /**     * Helper method to create password     *     * Method to create a password from a login     *     * @access private     * @param  string  Login     * @return string     */    function _shuffle($login)    {        $tmp = array();        for ($i = 0; $i < strlen($login); $i++) {            $tmp[] = $login{$i};        }        shuffle($tmp);        return implode($tmp, '');    }    /**     * Create pronounceable password     *     * This method creates a string that consists of     * vowels and consonats.     *     * @access private     * @param  integer Length of the password     * @return string  Returns the password     */    function _createPronounceable($length)    {        global $_Text_Password_NumberOfPossibleCharacters;        $retVal = '';        /**         * List of vowels and vowel sounds         */        $v = array('a', 'e', 'i', 'o', 'u', 'ae', 'ou', 'io',                   'ea', 'ou', 'ia', 'ai'                   );        /**         * List of consonants and consonant sounds         */        $c = array('b', 'c', 'd', 'g', 'h', 'j', 'k', 'l', 'm',                   'n', 'p', 'r', 's', 't', 'u', 'v', 'w',                   'tr', 'cr', 'fr', 'dr', 'wr', 'pr', 'th',                   'ch', 'ph', 'st', 'sl', 'cl'                   );        $v_count = 12;        $c_count = 29;        $_Text_Password_NumberOfPossibleCharacters = $v_count + $c_count;        for ($i = 0; $i < $length; $i++) {            $retVal .= $c[mt_rand(0, $c_count-1)] . $v[mt_rand(0, $v_count-1)];        }        return substr($retVal, 0, $length);    }    /**     * Create unpronounceable password     *     * This method creates a random unpronounceable password     *     * @access private     * @param  integer Length of the password     * @param  string  Character which could be use in the     *                 unpronounceable password ex : 'A,B,C,D,E,F,G'     *                 or numeric or alphanumeric.     * @return string  Returns the password     */    function _createUnpronounceable($length, $chars)    {        global $_Text_Password_NumberOfPossibleCharacters;        $password = '';        /**         * List of character which could be use in the password         */         switch($chars) {         case 'alphanumeric':             $regex = 'A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|0|1|2|3|4|5|6|7|8|9';             $_Text_Password_NumberOfPossibleCharacters = 62;             break;         case 'numeric':             $regex = '0|1|2|3|4|5|6|7|8|9';             $_Text_Password_NumberOfPossibleCharacters = 10;             break;         case '':             $regex = '_|#|@|%|

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?