php中文网最新课程

每日17点准时技术干货分享

本文为php中文网认证作者:“安安杰尼”投稿,欢迎加入php中文网有偿投稿计划!

使用场景

现在越来越多的项目使用的前后端分离的模式进行开发,后端开发人员使用API接口传递数据给到前端开发进行处理展示,在一些比较重要的修改数据接口,涉及金钱,用户信息等修改的接口如果不做防护验证,经常容易被人恶意刷接口,导致巨大的损失。

API签名验证

这里我们引入业内比较通用的签名验证来对接口进行参数加密,有以下优势。

  • 请求的唯一性:计算出的签名是唯一的,可以用来验证。

  • 参数的可变性:参数中包含时间戳参数,这就保证每次的请求计算出得签名都是不一样的。

  • 请求的时效:由于请求中带有当前发起请求的时间戳参数,服务端可以对时间戳进行验证,过滤超出时效的请求。

  • 安全性:即使请求被人恶意抓包,对方恶意篡改其中的参数,那么签名都是错误的,参数无法修改。

实践出真理

1. 对map类型(即一组键值对)的待签名数据根据键的大小进行排序。map中各参数按字母顺序排序,如果第一个字母相同,按第二个字母排序,依次类推。例如

{    "timestamp": "2017-06-08 09:38:00",    "format": "xml",    "app_id": "aabbc",    "cp_extend_info": "",    "sign_type": "HMAC-SHA1",    "sign": "abc"}

那么,排序后变成

{    "app_id": "aabbc",    "cp_extend_info": "",    "format": "xml",    "sign_type": "HMAC-SHA1",    "timestamp": "2017-06-08 09:38:00"}

注意:如果map中包含签名的参数(sign)需要过滤该参数的键值不参与签名,没有值的参数请不要参与签名

2. 对排序后的map进行序列化处理成待签名字符串,拼接后的待签名字符串为

app_id=aabbc&format=xml&sign_type=HMAC-SHA1&timestamp=2017-06-08 09:38:00

3. 根据HMAC-SHA1算法使用密钥提取待签名字符串的摘要(hash)签名并进行base64_encode编码(便于显性传输和对比),假设签名密钥为 test ,则提取出的摘要签名并进行base64_encode的值为

JqoEqPIVVor0eyRHMYiZftsycVo=

注意:由于有些数据根据HTTP协议需求,在网络传输过程中需要进行URLencoding,这样接收方才可以接收到正确的参数,但如果这个参数参与签名,那么待签名字符串必须是字符串原值而非URLencoding 的值。

代码实践

PHP示例

/** * 使用密钥生成HMAC-Sha1签名 * @param array $params 请求参数 * @param string $signKey 签名密钥 * @return string */function hmacSha1Sign($params,$signKey){    ksort($params);      $paramString = '';    foreach ($params as $key => $value) {        if (is_null($value) || $value=='' || $key == 'sign') {            continue;        }        $paramString .= $key.'='.$value.'&';    }    $paramString = substr($paramString,0,-1);    $sign = base64_encode(hash_hmac("sha1", $paramString, $signKey, $raw_output=TRUE));    return $sign;}

php 中文key_API常用签名验证方法(PHP实现)相关推荐

  1. php api接口验证签名错误,API常用签名验证方法(PHP实现)

    使用场景 现在越来越多的项目使用的前后端分离的模式进行开发,后端开发人员使用API接口传递数据给到前端开发进行处理展示,在一些比较重要的修改数据接口,涉及金钱,用户信息等修改的接口如果不做防护验证,经 ...

  2. 使用TkMybatis逆向生成带中文注释文件,并使用其常用的方法

    首先说明,博主用的是springboot,如使用原生态的mybatis的一些配置文件请自行百度 贴上pom文件 <?xml version="1.0" encoding=&q ...

  3. php utf-8读取,PHP读取文件,解决中文乱码UTF-8的方法分析

    PHP读取文件,解决中文乱码UTF-8的方法分析,方法,中文,操作技巧,文本,本文 PHP读取文件,解决中文乱码UTF-8的方法分析 易采站长站,站长之家为您整理了PHP读取文件,解决中文乱码UTF- ...

  4. mysql脚本执行中文乱码_MySQL从命令行导入SQL脚本时出现中文乱码的解决方法

    本文实例讲述了MySQL从命令行导入SQL脚本时出现中文乱码的解决方法.分享给大家供大家参考,具体如下: 在图形界面管理工具 MySql Query Browser中打开脚本(脚本包括建库.建表.添加 ...

  5. MyEclipse常用设置方法

    MyEclipse常用设置方法 MyEclipse作为Eclipse的一款插件迅速"走红",为当今企业的开发J2EE项目的首选IDE. 用MyEclipse不久,但在这不久的时间内 ...

  6. iOS开发中常用的方法

    iOS开发中常用的方法 系统弹窗: 过期方法: UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"确认报价" ...

  7. 前端JS常用工具方法

    前端JS常用工具方法 // var ua = window.navigator.userAgent.toLowerCase(); /*** 前端JS常用工具方法* @class Tools*/ exp ...

  8. 结合语言知识和深度学习的中文文本情感分析方法

    结合语言知识和深度学习的中文文本情感分析方法 徐康庭, 宋威 北方工业大学信息学院 摘要:在目前的中文文本情感分析研究中,基于语义规则和情感词典的方法通常需要人工设置情感阈值:而基于深度学习的方法由于 ...

  9. Java | Java常用API方法总结

    Java常用API方法总结 常用API JavaAPI 1 java.lang String StringBuilder Integer parseXxx Math Object System Thr ...

最新文章

  1. Android Activity的launchMode四种启动模式备忘
  2. vue-cli ——解决多次复用含有Echarts图表组件的问题
  3. Halcon算子知识:optical_flow_mg
  4. mysql 视图怎么调用方法_mysql 视图的使用
  5. 77 行代码实现 ABAP ALV 中的双击事件处理
  6. Cloud for Customer UI designer自动生成的一些模型
  7. SQL语句中的TOP(expression) [PERCENT] [WITH TIES] 用法
  8. Windows2003开机后进不了系统
  9. MySQL 数据查询
  10. plcst语言编程教程_ST 结构文本 PLC编程语言 教程.pdf
  11. 字体引起的用户密码错误
  12. 【Python】一键爬取金庸连载版/三联版/世纪新修版小说
  13. 地址总线是单向还是双向_「计算机组成原理」:总线、地址总线、数据总线和控制总线...
  14. Make sure that libnvrtc-builtins.so.11.1 is installed correctly.
  15. 网页打开速度慢,如何解决(修改DNS)
  16. [阿毛]Ubuntu 16安装CH340串口驱动
  17. 快速串联 RNN / LSTM / Attention / transformer / BERT / GPT
  18. 毕业论文写作中数据获取与查询
  19. 针对Intel芯片mac、win平台对cpu功耗、频率、电源等信息检测
  20. 机器人主板需求配置参数有哪些呢?

热门文章

  1. 消息中间件学习总结(4)——RocketMQ之RocketMQ 迈入50万TPS消息俱乐部
  2. Maven学习总结(35)——Maven项目错误 JAX-RS (REST Web Services) 2.0 can not be installed问题...
  3. Java Web学习总结(33)——Java Web 程序员如何转型大数据
  4. java中为什么需要常量和变量的区别_Java中常量和最终变量之间的区别?
  5. mysql的两种存储方法_mysql的两种存储引擎
  6. SpringBoot 开启关闭自动任务配置(EnableScheduling )
  7. 一个资深系统管理员的O2O实践(三)
  8. Eclipse自动生成作者、日期注释功能设置
  9. 献策企业:制定优秀移动化企业七步骤
  10. 2728:摘花生(数字金子塔变形)