• 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. }

  • 相关阅读:
    Java基本数据类型
    【自学开发之旅】Flask-会话保持-API授权-注册登录
    AI企业盈利与成本问题
    maven本地化jbarcode-0.2.7.jar
    写一个基于C语言的保守垃圾回收器
    【数据结构与算法】骑士周游算法/马踏棋盘算法的介绍和程序实现
    C++ 20 内存模型(一)
    Vue速成学习笔记
    【开源】给ChatGLM写个,Java对接的SDK
    java unit test (junit)
  • 原文地址:https://blog.csdn.net/weixin_39934453/article/details/134446278