# 安全相關函數目錄
[TOC=2,3]
* * * * *
* * * * *
* * * * *
- ## 根據規則生成的LMS簽名算法
* * * * *
>[info]#### 1.根據規則生成的LMS簽名算法【createSignature】
~~~
$accessKey = '1IKQ0TRvvdYDwVFrZAPXMpHRFObbzq90';
$secretKey = 'IrGPklFuNa7a1XiinGS58dmAu4ZY75Gn';
/**
* 根據規則生成的簽名算法
* @param: $params 數組參數(除Signature參數外的所有參數)
* @return: return_type
* @date: 2017年12月28日 上午10:14:44
* @author: ityangs<ityangs@163.com>
*/
private function createSignature($params){
ksort($params);
$text = '';
foreach ($params as $k => $v) {
if (empty($v)) {
continue;
}
$text .= $k . $v;
}
//計算本地的簽名
return base64_encode(md5(utf8_encode($secretKey . $text . $secretKey)));
}
~~~
>[info]#### 2. 測試
- #### 函數使用
~~~
$data=array(
'username'=>'5555@qq.com',
'password'=>'1234567',
);
createSignature($params);
~~~
* * * * *
* * * * *
* * * * *
- ## 接口生成簽名算法
* * * * *
>[info]#### 1.接口生成簽名算法【createSignature】
~~~
/**
* 生成簽名算法
* 算法:
* 1. 將所有的業務參數(包括時間戳參數:timestamp)按字母先后順序排序
*2. 參數名稱和參數值拼接成一個字符串,為避免空字符串在傳輸過程中被轉換成 null 的影響,值為空的參數不參與拼接
*3. 在拼接的字符串前后都加上 secret_key 組成一個新的字符串
*4. 對字符串進行 utf8_encode,然后 md5,最后 base64_encode,得到簽名字符串。采用utf-8提前對參數進行編碼,可以減少客戶端編碼差異帶來的影響,因為服務端到時是統一采用utf-8來做的,最后進行BASE64編碼的原因是將摘要內容全部轉換為可顯字符,應對某些不可顯字符在網絡傳輸中的丟失。
* @param array $params
* @return string
*/
protected function createSignature(array $params)
{
$text = '';
ksort($params);
foreach ($params as $key => $value) {
if (empty($value)) {
continue;
}
$text .= $key . $value;
}
return base64_encode(md5(utf8_encode($this->secretKey . $text . $this->secretKey)));
}
~~~
>[info]#### 2. 測試
- #### 函數使用
~~~
$requestData = [
'app_key' => $this->appKey,
'module' => $module ?: explode('.', $method, 2)[0],
'method' => $method,
'content' => json_encode($data),
'timestamp' => gmdate('Y-m-d H:i:s')
];
$signature = $this->createSignature($requestData);
~~~