// 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('"', '"', $string);
$string = str_replace("'", '', $string);
$string = str_replace('"', '', $string);
$string = str_replace(';', '', $string);
$string = str_replace('<', '<', $string);
$string = str_replace('>', '>', $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);
}