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 . "类型的签名方式");
}
}

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

드림위버 CS6
시각적 웹 개발 도구

Dreamweaver Mac版
시각적 웹 개발 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전
