md5後的加密傳輸

本類是把原32位md5字符串通過加鹽與對應密碼本的方式加長爲128位新密文,從而實現md5基礎上的再加密。

<?php
//密碼加密傳輸,所有的md5密碼按照此類轉換後再進行傳輸!
class PasswordMd5Api{
    private $key_map;
    private $letter_map;
    private $range_map;
    public function __construct(){
        $this->key_map = array(
            '0'=>array('c','9'),
            '1'=>array('a','h'),
            '2'=>array('d','i'),
            '3'=>array('e','j'),
            '4'=>array('f','k'),
            '5'=>array('z','o'),
            '6'=>array('x','p'),
            '7'=>array('u','q','6'),
            '8'=>array('s','r','7'),
            '9'=>array('l','v'),
            'a'=>array('n','w','3'),
            'b'=>array('m','5'),
            'c'=>array('g','y',),
            'd'=>array('t','0'),
            'e'=>array('4','1'),
            'f'=>array('b','2','8'),
        );
        $this->letter_map = array(
            'c'=>'0','9'=>'0',
            'a'=>'1','h'=>'1',
            'd'=>'2','i'=>'2',
            'e'=>'3','j'=>'3',
            'f'=>'4','k'=>'4',
            'z'=>'5','o'=>'5',
            'x'=>'6','p'=>'6',
            'u'=>'7','q'=>'7','6'=>'7',
            's'=>'8','r'=>'8','7'=>'8',
            'l'=>'9','v'=>'9',
            'n'=>'a','w'=>'a','3'=>'a',
            'm'=>'b','5'=>'b',
            'g'=>'c','y'=>'c',
            't'=>'d','0'=>'d',
            '4'=>'e','1'=>'e',
            'b'=>'f','2'=>'f','8'=>'f'
        );
        $this->range_map = array_merge(range(0,9),range('a','z'));//創建包含有0~9,a~z的數組
    }

    /**
     * 用md5密碼生成出傳輸用的密碼
     * @param  string $md5_string 原始md5密碼
     * @return string $new_md5_string 傳輸用的密碼
     */
    public function createMd5($md5_string){
        $this->randKeyMap();
        $new_md5_string = '';
        for($i=0;$i<32;$i++){
            $new_md5_string .= $this->getSalt().$this->key_map[$md5_string[$i]];
        }
        return $new_md5_string;
    }

    /**
     * 生成隨機密碼本
     */
    private function randKeyMap(){
        $tmp_map = array();
        foreach ($this->key_map as $key => $value) {
            $tmp_map[$key] = $value[rand(0,count($value)-1)];
        }
        $this->key_map = $tmp_map;
    }

    /**
     * 生成鹽,生成方式,隨機的3位
     */
    private function getSalt(){
        $salt = '';
        for($i=0;$i<3;$i++){
            $salt .= $this->range_map[rand(0,count($this->range_map) - 1)];
        }
        return $salt;
    }

    /**
     * 將傳輸用的密碼解析爲原始的md5密碼
     * @param  string $need_parse_md5_string 傳輸的密碼
     * @return string $md5_string 解析後的密碼
     */
    public function parseMd5($need_parse_md5_string){
        $md5_string = '';
        $len = strlen($need_parse_md5_string);
        $parse_string = '';
        for($i=0;$i<$len;$i+=4){
            $parse_string .= substr($need_parse_md5_string,($i+3),1);//每四位截取1位得出32位密文
        }

        for($i=0;$i<32;$i++){
            $md5_string .= $this->letter_map[$parse_string[$i]];//通過密碼本解析出實際的32位MD5原文
        }
        return $md5_string;
    }


}
發佈了28 篇原創文章 · 獲贊 17 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章