• php接口api数据签名及验签


    api数据签名作用:通过使用签名可以验证数据在传输过程中是否被篡改或修改。接收方可以使用相同的签名算法和密钥对接收到的数据进行验证,如果验证失败则表明数据被篡改过

     

    1、数据发送方进行接口签名并传输签名字段 

    1. // 请求URL
    2. $url = "http://localhost/test22.php"; // 替换为实际的URL
    3. // 要发送的数据
    4. $data = array(
    5. 'name' => 'John Doe',
    6. 'email' => 'john@example.com'
    7. );
    8. $key="adsad123";
    9. $data['sign']=sign($data,$key);
    10. // 发送POST请求
    11. $response = postRequest($url, $data);
    12. // 处理响应
    13. var_dump($response);
    14. function sign($array,$key)
    15. {
    16. // 1. 对数组按键进行升序排序
    17. ksort($array);
    18. // 2. 将键值对按顺序拼接到字符串中
    19. $str = "";
    20. foreach ($array as $k => $v) {
    21. $str .= $k . $v;
    22. }
    23. // 3. 添加密钥到拼接字符串末尾
    24. $restr = $str . $key;
    25. // 4. 对拼接字符串进行SHA1加密,并转换为大写
    26. $sign = strtoupper(sha1($restr));
    27. // 5. 返回生成的签名
    28. return $sign;
    29. }
    30. function postRequest($url, $data) {
    31. $postData = http_build_query($data);
    32. $curl = curl_init($url);
    33. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    34. curl_setopt($curl, CURLOPT_POST, true);
    35. curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
    36. $response = curl_exec($curl);
    37. if ($response === false) {
    38. $error = curl_error($curl);
    39. return "cURL Error: " . $error;
    40. } else {
    41. return $response;
    42. }
    43. curl_close($curl);
    44. }

    发送的签名数据

     

    2、接口接受方,进行数据签名并且对比签名

    1. $key="adsad123";
    2. $data=$_POST;
    3. unset($data['sign']);
    4. $sign=sign($data,$key);
    5. if($sign==$_POST['sign']){
    6. echo '验签成功';
    7. }else{
    8. echo '验签失败';
    9. }
    10. function sign($array,$key)
    11. {
    12. // 1. 对数组按键进行升序排序
    13. ksort($array);
    14. // 2. 将键值对按顺序拼接到字符串中
    15. $str = "";
    16. foreach ($array as $k => $v) {
    17. $str .= $k . $v;
    18. }
    19. // 3. 添加密钥到拼接字符串末尾
    20. $restr = $str . $key;
    21. // 4. 对拼接字符串进行SHA1加密,并转换为大写
    22. $sign = strtoupper(sha1($restr));
    23. // 5. 返回生成的签名
    24. return $sign;
    25. }

  • 相关阅读:
    《微信小程序-基础篇》带你了解小程序中的生命周期(一)
    [LCT刷题][树链信息维护] P4332 [SHOI2014]三叉神经树
    1,2-二苯基-1,2-二(4-苄溴基苯基)乙烯;TPE-MB结构式
    【HackTheBox Topology】打靶记录
    洛谷题单算法1-6二分查找与二分答案
    堆排序算法用数组模拟二叉树,求A[K](K>0)的父节点坐标
    centos7下编译安装freeswitch及常见编译问题的解决
    Qt 实现实时语音通话功能
    jquery
    STM32,我想看单片机上的外设时钟,我怎么看?
  • 原文地址:https://blog.csdn.net/weixin_39934453/article/details/134446278