内部框架常用函数

加密函数 encrypt()

$user_row['id'] = 1001;
$user_row['user'] = 'admin';
$user_time['time'] = time();
$user_row['jwt'] = 'J3W3893NF2F23UNF2';
$user_str = http_build_query($user_row);

		$user_str = str_replace('&', '&', $user_str);

		if ($user_key)
		{
			Yf_Hash::setKey($user_key);
		}

		$encrypt_str = Yf_Hash::encrypt($user_str);

解密decrypt()

<?php
/**
 * 用来加密解密数据。
 * 
 * @category   Framework
 * @package    Hash
 * @author     Yf <service@yuanfeng.cn>
 * @copyright  Copyright (c) 2010 远丰仁商
 * @version    1.0
 * @todo       
 */
class Yf_Hash 
{
    private static $_key = 'fjsakjlkg&*^%)(89042432';

    /**
     * Passport 加密函数
     *
     * @param    string        等待加密的原字串
     * @param    string        私有密匙(用于解密和加密)
     *
     * @return    string        原字串经过私有密匙加密后的结果
     */
    public static function encrypt($txt) 
    {
        //使用随机数发生器产生 0~32000 的值并 MD5()
        srand((double)microtime() *1000000);
        $encrypt_key = md5(rand(0, 32000));

        //变量初始化
        $ctr = 0;
        $tmp = '';

        //for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
        $txt_len = strlen($txt);
        $encrypt_key_len = strlen($encrypt_key);

        for ($i = 0; $i<$txt_len; $i++) 
        {
            //如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
            $ctr = $ctr == $encrypt_key_len ? 0 : $ctr;

            //$tmp 字串在末尾增加两位,其第一位内容为 $encrypt_key 的第 $ctr 位,
            //第二位内容为 $txt 的第 $i 位与 $encrypt_key$ctr 位取异或。然后 $ctr = $ctr + 1
            $tmp.= $encrypt_key[$ctr] . ($txt[$i]^$encrypt_key[$ctr++]);
        }

        //返回结果,结果为 passportKey() 函数返回值的 base65 编码结果
        return base64_encode(self::passportKey($tmp));
    }

    /**
     * Passport 解密函数
     *
     * @param        string        加密后的字串
     * @param        string        私有密匙(用于解密和加密)
     *
     * @return    string        字串经过私有密匙解密后的结果
     */
    public static function decrypt($txt) 
    {
        //$txt 的结果为加密后的字串经过 base64 解码,然后与私有密匙一起,
        //经过 passportKey() 函数处理后的返回值
        $txt = self::passportKey(base64_decode($txt));

        //变量初始化
        $tmp = '';

        $txt_len = strlen($txt);

        //for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
        for ($i = 0; $i <$txt_len; $i++) 
        {
            //$tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
            //与 $txt 的第 $i + 1 位取异或。然后 $i = $i + 1
            $tmp.= $txt[$i]^$txt[++$i];
        }

        //返回 $tmp 的值作为结果
        
        return $tmp;
    }

    /**
     * Passport 密匙处理函数
     *
     * @param        string        待加密或待解密的字串
     * @param        string        私有密匙(用于解密和加密)
     *
     * @return    string        处理后的密匙
     */
    public static function passportKey($txt) 
    {
        //将 $encrypt_key 赋为 $encrypt_key 经 md5() 后的值
        $encrypt_key = md5(self::$_key);
        //变量初始化
        $ctr = 0;
        $tmp = '';

        $txt_len = strlen($txt);
        $encrypt_key_len = strlen($encrypt_key);


        //for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
        
        for ($i = 0; $i <$txt_len; $i++) 
        {
            //如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
            $ctr = $ctr == $encrypt_key_len ? 0 : $ctr;
            //$tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
            //与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1
            $tmp.= $txt[$i]^$encrypt_key[$ctr++];
        }

        //返回 $tmp 的值作为结果
        return $tmp;
    }

    /**
     * 设置key
     *
     * @param        array        待编码的数组
     *
     * @return    string        数组经编码后的字串
     */
    public static function setKey($key=null) 
    {
        if ($key)
        {
            self::$_key = $key;
            return true;
        }
        else
        {
            return false;
        }
    }

    /**
     * 设置key
     *
     * @param        array        待编码的数组
     *
     * @return    string        数组经编码后的字串
     */
    public static function getKey() 
    {
        return self::$_key;
    }

    /**
     * 用户散列hash
     *
     * @param        $str        用于散列的字符串
     * @param        $level        散列的深度
     *
     * @return    string        数组经编码后的字串
     */
    public static function hashNum($str, $level=1, $dir=false)
    {
        if ($str)
        {
            $md5_user = md5(strtolower($str));

            if (1 == $level)
            {
                return hexdec($md5_user[0]);
            }
            else
            {
                $level_row = array();

                if ($dir)
                {
                    for ($i=0; $i<$level; $i++)
                    {
                        $level_row[$i] = hexdec($md5_user[$i]);
                    }
                }
                else
                {
                    for ($i=0; $i<$level; $i++)
                    {
                        $level_row[$i] = hexdec($md5_user[$i]);
                    }

                }

                return $level_row;
            }
        }
        else
        {
            return false;
        }
    }
}

/*
Yf_Hash::setKey(1111);

$data = array(
    'time'        => time(),
    'user_account'    => "xinze",
    'user_nickname'    => $user_nickname,
    'prize_count'    => 123,
    'da'    => array(1, 3, 4)
);

$str = http_build_query($data);

$encrypt_str = Yf_Hash::encrypt($str);

echo $encrypt_str;
echo '<br />';

$decrypt_str = Yf_Hash::decrypt($encrypt_str);
echo '<pre>';
parse_str($decrypt_str, $now_data);
print_r($now_data);
*/

?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值