# 安全相关函数目录
[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);
~~~