欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP中签名校验步骤

程序员文章站 2024-03-19 13:35:28
...

在接口开发中,PHP会向面向用户的APP端,小程序端提供安全有效的校验接口。
在PHP中,可实践的有签名sign验证法:
PHP服务端约定一个或多个混淆参数,参与签名生成,一般签名生成使用md5函数。
假如客户端提交的参数如下,用PHP数组简单描述,array('name'=>'linlong','age'=>24),一般这个客户端根据需要生成相应字段
先将get或post参数按键名排序,得到,age=>24,name=>linlong,
拼接成字符串,age=24&name=linlong,其中“&”符号可以自定义,也可去掉
将上步骤中的拼接字符串加上混淆字符组合,假如前后混淆参数分别为,1234,8974,则混淆后的字符串为:1234+age=24&name=linlong+8974,其中“+”为连字符,起到字符串连接的作用。
将混淆后的拼接字符串md5加密。如md5($aaa);

php端校验也是按照上面步骤进行,客户端传送过sign参数和其他参数,如post数据为,sign=adh2878238,age=24,name=linlong
将除sign之外的参数进行排序并连接,加上混淆字符串,最后md5生成服务端的sign,将服务端生成的sign和客户端传递来的sign进行字符比对。
PHP服务端简单代码如下:

function verify_sign($data){
    if (!isset($data['sign'])) {
        return false;
    }
    // 验证签名
    // 保存客户端提交的sign参数
    $origin_sign = $data['sign'];
    // 客户端sign不参与校验,剔除
    unset($data['sign']);
    // 排序,按键名
    ksort($data);
    $sign_str = "";
    foreach ($data as $key => $val) {
        $sign_str .= $key . "=" . $val . "&";
    }
    // 去除最后一个“&”符号,不参与校验
    $sign_str = substr($sign_str, 0, -1);
    $sign = md5('1234' . $sign_str . '8957');
    if ($origin_sign != $sign) {
       return false;
    }
   return true;
  }

其中混淆参数可以只有一个,可以由多个,根据需要设置,服务端和客户端约定好。

本文原文发布在:http://www.geek9527.com/index.php/PHP/16.html

相关标签: PHP PHP签名校验