🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 安全相关函数目录 [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); ~~~