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;
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值