php 一些實用的工具代碼

// md5加密數據 添加sign
function md5Encryption($post_data)
{
	$post_data['time_stamp'] = time();
	ksort($post_data);
	$post_data['sign'] = md5( implode('#', $post_data) . '58coin' );
	//print_r($post_data);
	return $post_data;
}	

// 驗證 md5加密數據sign
function checkMd5Encryption($post_data)
{
	// 驗證有效期【60秒】
	if( ($post_data['time_stamp']+60) < time() ):
		echo json_encode(['code'=>400,'msg'=>'overtime!', 'data'=>'']);
		die;
	endif;
	// 驗證簽名
	$sign = $post_data['sign'];
	unset($post_data['sign']);
	ksort($post_data);
	if($sign != md5( implode('#', $post_data) . '58coin' ) ):
		echo json_encode(['code'=>400,'msg'=>'sign error!', 'data'=>'']);
		die;
	endif;
}


/**
 * 安全過濾函數
 * @param $string
 * @return string
 */
function safe_replace($string)
{
    $string = str_replace('%20', '', $string);
    $string = str_replace('%27', '', $string);
    $string = str_replace('%2527', '', $string);
    $string = str_replace('*', '', $string);
    $string = str_replace('"', '&quot;', $string);
    $string = str_replace("'", '', $string);
    $string = str_replace('"', '', $string);
    $string = str_replace(';', '', $string);
    $string = str_replace('<', '&lt;', $string);
    $string = str_replace('>', '&gt;', $string);
    $string = str_replace("{", '', $string);
    $string = str_replace('}', '', $string);
    $string = str_replace('\\', '', $string);
    return $string;
}

/**
 * 字符串加密、解密函數
 *
 *
 * @param    string    $txt        字符串
 * @param    string    $operation    ENCODE爲加密,DECODE爲解密,可選參數,默認爲ENCODE,
 * @param    string    $key        密鑰:數字、字母、下劃線
 * @param    string    $expiry        過期時間
 * @return    string
 */
function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0)
{
    $ckey_length = 4;
    $key = md5($key != '' ? $key : config('data_auth_key'));
    $keya = md5(substr($key, 0, 16));
    $keyb = md5(substr($key, 16, 16));
    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : '';

    $cryptkey = $keya . md5($keya . $keyc);
    $key_length = strlen($cryptkey);

    $string = $operation == 'DECODE' ? base64_decode(strtr(substr($string, $ckey_length), '-_', '+/')) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;
    $string_length = strlen($string);

    $result = '';
    $box = range(0, 255);

    $rndkey = array();
    for ($i = 0; $i <= 255; $i++) {
        $rndkey[$i] = ord($cryptkey[$i % $key_length]);
    }

    for ($j = $i = 0; $i < 256; $i++) {
        $j = ($j + $box[$i] + $rndkey[$i]) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }

    for ($a = $j = $i = 0; $i < $string_length; $i++) {
        $a = ($a + 1) % 256;
        $j = ($j + $box[$a]) % 256;
        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;
        $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
    }

    if ($operation == 'DECODE') {
        if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) {
            return substr($result, 26);
        } else {
            return '';
        }
    } else {
        return $keyc . rtrim(strtr(base64_encode($result), '+/', '-_'), '=');
    }
}

# 檢查數組裏面是否爲空
function check_arr($arr){
    foreach($arr as $v){
        if(empty($v)){
            return false;
            break;
        }
    }
    return true;
}

# 獲取隨機 num 爲字符串
function set_salt($num = 10){
    $str = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890';
    $salt = substr(str_shuffle($str), 10, $num);
    return $salt;
}

# 下載文件
function DownloadFile($fileName='a.txt')
{
	ob_end_clean();
	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
	header('Content-Description: File Transfer');
	header('Content-Type: application/octet-stream');
	header('Content-Length: ' . filesize($fileName));
	header('Content-Disposition: attachment; filename=' . basename($fileName));
	readfile($fileName);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章