php api md5签名,PHP接口开发数据签名程序代码

PHP接口开发数据签名这个非常的重要不但要有好的算法同时也要保密了,下面我们来看一篇由php实现的关于PHP接口开发数据签名例子吧,具体如下所示。

现在应用开发中通常会用到接口,其数据是通过开放的互联网传输,对数据的安全性有一定要求,为了防止数据在传输过程中被篡改,常用数据签名(sign)的方式来校验。

数据签名sign生成方法

①去除数组中的空值和签名参数(sign/sign_type)

②按键名升序排列数组

③把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串

④把拼接后的字符串再与安全校验码直接连接起来

⑤MD5等加密函数,加密字符串

示例代码

class Sign {

/**

* 获取数据签名

*

* @param  array  $param  签名数组

* @param  string $code      安全校验码

* @param  string $sign_type 签名类型

* @return string        签名字符串

*/

public static function getSign($param, $code, $sign_type = 'MD5'){

//去除数组中的空值和签名参数(sign/sign_type)

$param = self::paramFilter($param);

//按键名升序排列数组

$param = self::paramSort($param);

//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串

$param_str = self::createLinkstring($param);

//把拼接后的字符串再与安全校验码直接连接起来

$param_str = $param_str . $code;

//创建签名字符串

return self::createSign($param_str, $sign_type);

}

/**

* 校验数据签名

*

* @param  string $sign  接口收到的签名

* @param  array  $param  签名数组

* @param  string $code      安全校验码

* @param  string $sign_type 签名类型

* @return boolean true正确,false失败

*/

public static function checkSign($sign, $param, $code, $sign_type = 'MD5'){

return $sign == self::getSign($param, $code, $sign_type);

}

/**

* 去除数组中的空值和签名参数

*

* @param  array $param 签名数组

* @return array        去掉空值与签名参数后的新数组

*/

private static function paramFilter($param){

$param_filter = array();

foreach ($param as $key => $val) {

if($key == 'sign' || $key == 'sign_type' || !strlen($val)){

continue;

}

$param_filter[$key] = $val;

}

return $param_filter;

}

/**

* 按键名升序排列数组

*

* @param  array $param 排序前的数组

* @return array        排序后的数组

*/

private static function paramSort($param){

ksort($param);

reset($param);

return $param;

}

/**

* 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串

*

* @param  array $param 需要拼接的数组

* @return string       拼接完成以后的字符串

*/

private static function createLinkstring($param){

$str = '';

foreach ($param as $key => $val) {

$str .= "{$key}={$val}&";

}

//去掉最后一个&字符

$str = substr($str, 0, strlen($str) - 1);

//如果存在转义字符,那么去掉转义

if(get_magic_quotes_gpc()){

$str = stripslashes($str);

}

return $str;

}

/**

* 创建签名字符串

*

* @param  string $param 需要加密的字符串

* @param  string $type  签名类型 默认值:MD5

* @return string 签名结果

*/

private static function createSign($param, $type = 'MD5'){

$type = strtolower($type);

if($type == 'md5'){

return md5($param);

}

if($type == 'dsa'){

exit('DSA 签名方法待后续开发,请先使用MD5签名方式');

}

exit("接口暂不支持" . $type . "类型的签名方式");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值