日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

php数据接口api安全,API接口数据安全之授权码sign

發(fā)布時(shí)間:2023/11/30 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php数据接口api安全,API接口数据安全之授权码sign 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

**API接口數(shù)據(jù)安全之授權(quán)碼sign**

>[success] 1. ASE加密方式加密

~~~

class Aes{

private $key = null;

/**

*@param String $key 密鑰

*@return String

*/

public funciton __construct(){

//配置文件中的asekey 服務(wù)端及客戶端必須保持一致 且加密key必須為16 、32、64位

$this->key = C('app.asekey');

}

/**

*加密

*@param String input 加密的字符串

*@param String key 解密的key

*@return HexString

*/

public function encrypt($input=''){

$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB); // 獲得加密算法的分組大小

$input = $this->pkcs5_pad($ipunt,$size);

$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_ECB,'');

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_RAND);

mcrypt_generic_init($td,$this->key,$iv);

$data = mcrypt_generic($td,$input);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

$result = base64_encode($data);

return $result;

}

/**

*填充方式 pkcs5

*@param String text 原始字符串

*@param String blocksize 加密長度

*@return String

*/

private function pkcs5_pad($text,$blocksize){

$pad = $blocksize-(strlen($text) % $blocksize);

return $text.str_repeat(chr($pad),$pad);

}

/**

*解密

*@param String str 加密的字符串

*@param String key 解密的key

*@return String

*/

public function decrypt($str){

$decryted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$this->key,base64_decode($str),MCRYPT_MODE_ECB);

$dec_s = strlen($decryted);

$padding = ord($decryted[$dec_s-1]);

$decryted = substr($decryted,0,-$padding);

return $decryted;

}

}

~~~

>[success]2.生成加密后的sign

~~~

/**

*生成請求的sign

*@param array $data

*@return string

*/

function setSign($data=array()){

//1.按字段排序

ksort($data);

// 2.拼接字符串?dāng)?shù)據(jù) &

$string = http_build_query($data);

// 3.通過aes來加密

$sign = (new Aes())->encrypt($string);

return $sign;

}

//示例

$data = [

'did' => '12345dg',

'version' => '1.0'

];

$sign = setSign($data); //ne2qhhj4x3abeHKH+mhNV04USjWNzhkA5bcB7bxH4EA=

~~~

>[success]3.解密sign

~~~

$sign = "ne2qhhj4x3abeHKH+mhNV04USjWNzhkA5bcB7bxH4EA=";

echo (new Aes())->decrypt($sign); // did=12345dg&version=1.0

~~~

>[success]4.校驗(yàn)客戶端的sign

~~~

/**

*@param Stirng clientSign 通過客戶端的header頭傳遞過來

*@param Array data 客戶端提交過來的字段

*@return boolen

*/

function checkSign($clientSign='',$data=array()){

if(empty($clientSign)){

return false;

}

$checkSign = setSign($data); // 生成sign

if($clientSign != $checkSign){

return false;

}

return true;

}

~~~

**函數(shù)**

>[danger] parse_str() 函數(shù)的使用

~~~

$str = "did=12345dg&version=1.0";

parse_str($str,$arr);

var_dump($arr);die;

結(jié)果為:

array(2) {

["did"]=>

string(7) "12345dg"

["version"]=>

string(3) "1.0"

}

~~~

>[danger]http_build_query()函數(shù)的使用

~~~

$data = array(

'did'=> '12345dg',

'version'=> '1.0'

);

$str = http_build_query($data);

echo $str; // did=12345dg&version=1.0 將數(shù)組以&拼接

~~~

總結(jié)

以上是生活随笔為你收集整理的php数据接口api安全,API接口数据安全之授权码sign的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。