码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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. }

  • 相关阅读:
    2.HTML中常用浏览器
    Linux用户/用户组管理
    尚硅谷Nginx教程由浅入深--笔记
    从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 编写服务器
    论如何直接用EF Core实现创建更新时间、用户审计,自动化乐观并发、软删除和树形查询(中)
    计算机毕业设计Python+django网上求职招聘系统(源码+系统+mysql数据库+Lw文档)
    【线性代数】第四章-n维向量:向量、向量组、线性表出、极大无关组与向量组的秩等
    JSP笔记
    Java代码审计——WebGoat XML外部实体注入(XXE)
    【Linux网络编程】- 高并发服务器框架设计
  • 原文地址:https://blog.csdn.net/weixin_39934453/article/details/134446278
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号