PHP签名

1<?php 2 3class Sign { 4 5 /** 6 * 获取数据签名 7 * 8 * @param array $param 签名数组 9 * @param string $code 安全校验码 10 * @param string $sign_type 签名类型 11 * @return string 签名字符串 12 */ 13 public static function getSign($param, $code, $sign_type = 'MD5'){ 14 //去除数组中的空值和签名参数(sign/sign_type) 15 $param = self::paramFilter($param); 16 //按键名升序排列数组 17 $param = self::paramSort($param); 18 //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 19 $param_str = self::createLinkstring($param); 20 //把拼接后的字符串再与安全校验码直接连接起来 21 $param_str = $param_str . $code; 22 //创建签名字符串 23 return self::createSign($param_str, $sign_type); 24 } 25 26 /** 27 * 校验数据签名 28 * 29 * @param string $sign 接口收到的签名 30 * @param array $param 签名数组 31 * @param string $code 安全校验码 32 * @param string $sign_type 签名类型 33 * @return boolean true正确,false失败 34 */ 35 public static function checkSign($sign, $param, $code, $sign_type = 'MD5'){ 36 return $sign == self::getSign($param, $code, $sign_type); 37 } 38 39 /** 40 * 去除数组中的空值和签名参数 41 * 42 * @param array $param 签名数组 43 * @return array 去掉空值与签名参数后的新数组 44 */ 45 private static function paramFilter($param){ 46 $param_filter = array(); 47 foreach ($param as $key => $val) { 48 if($key == 'sign' || $key == 'sign_type' || !strlen($val)){ 49 continue; 50 } 51 $param_filter[$key] = $val; 52 } 53 return $param_filter; 54 } 55 56 /** 57 * 按键名升序排列数组 58 * 59 * @param array $param 排序前的数组 60 * @return array 排序后的数组 61 */ 62 private static function paramSort($param){ 63 ksort($param); 64 reset($param); 65 return $param; 66 } 67 68 /** 69 * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 70 * 71 * @param array $param 需要拼接的数组 72 * @return string 拼接完成以后的字符串 73 */ 74 private static function createLinkstring($param){ 75 $str = ''; 76 foreach ($param as $key => $val) { 77 $str .= "{$key}={$val}&"; 78 } 79 //去掉最后一个&字符 80 $str = substr($str, 0, strlen($str) - 1); 81 //如果存在转义字符,那么去掉转义 82 if(get_magic_quotes_gpc()){ 83 $str = stripslashes($str); 84 } 85 return $str; 86 } 87 88 /** 89 * 创建签名字符串 90 * 91 * @param string $param 需要加密的字符串 92 * @param string $type 签名类型 默认值:MD5 93 * @return string 签名结果 94 */ 95 private static function createSign($param, $type = 'MD5'){ 96 $type = strtolower($type); 97 if($type == 'md5'){ 98 return md5($param); 99 } 100 if($type == 'dsa'){ 101 exit('DSA 签名方法待后续开发,请先使用MD5签名方式'); 102 } 103 exit("接口暂不支持" . $type . "类型的签名方式"); 104 } 105} 106 107?>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )