日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

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

發(fā)布時(shí)間:2023/11/30 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php数据接口api安全,API接口数据安全之授权码sign 小編覺(jué)得挺不錯(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 加密長(zhǎng)度

*@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

~~~

/**

*生成請(qǐng)求的sign

*@param array $data

*@return string

*/

function setSign($data=array()){

//1.按字段排序

ksort($data);

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

$string = http_build_query($data);

// 3.通過(guò)aes來(lái)加密

$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 通過(guò)客戶端的header頭傳遞過(guò)來(lái)

*@param Array data 客戶端提交過(guò)來(lái)的字段

*@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的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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