PHP接口验签----一种简单可行的方式

背景:服务端和第三方服务有接口对接,那么第三方有没有一种简单的方式判断请求发自合法的合作方呢?
有一种简洁的方式就是,双方维护同一份私钥,在发起请求的时候,发起方将当前的请求参数,按照key值进行排序,然后’key=value’拼接到私钥后面,进行md5的编码。接收方以同样的处理方式,签名一致则合法,否则非法。如下为php的对应的sig生成算法举例:

//摘抄自http://docs.developer.qq.com
$secret_key = '3023IU&xmsfs78';
ksort($params);
foreach ($params as $key => $value) {
$secret_key.= $key.'='.$value;
}
$sign = md5($secret_key);
return $sign;
//java示例
String sign = MD5Util.MD5(KEY_STRING + jsonData);
return REQ_URL"?sign=" + sign + "&data=" + URLEncoder.encode(jsonData, "utf8");

//请求接收方处理示例:
<?php
$sig = strtoupper($_GET['sign']);
$data = $_GET['data'];

$key = '12345';

if ($sig == strtoupper(md5($key . $data))) {
    exit('验证通过');
} else {
    exit('验证失败');
}

file_put_contents("D:/test/tempOut.txt", $key.PHP_EOL, FILE_APPEND);

猜你喜欢

转载自blog.csdn.net/linysuccess/article/details/79580742