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);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值