参数说明:

from 接口发起方标识,由管理员分配
secret 密钥,由管理员分配
sign 签名
timestamp 时间戳 s (用于校验签名有效期)

sign算法;
1.对所有参数(此时不含sign参数)升序排列得出arrarg
2.把arrarg的值以’&’拼接成一个字符串得出strarg
3.secret.’&’.strarg.’&’.secret得出sign

<?php
defined('BASEPATH') OR exit('No direct script access allowed');/*** 发起方 校验类*/
class Sign {const TIME = 'timestamp';const FROM = 'from';const SIGN = 'sign';const TIMEOUT = 30; // 签名有效期 sprivate $ci;private $froms;public function __construct(){$this->ci =& get_instance();$this->froms = $this->ci->config->item('api_froms');}/*** [create 生成签名]* @param  [array] $args [参数列表]* @param  [string] $secret [密钥]* @return [string] sign*/public function create($args,$secret){if(isset($args[self::SIGN])){unset($args[self::SIGN]);}if(!is_array($args)){return FALSE;}else{ksort($args);$strArgs = implode('&', $args);return md5($secret.'&'.$strArgs.'&'.$secret);}}/*** [valid 校验请求]* @param  string $method [调用方式]* @return [array]*/public function valid($data){$err = -2;$msg = 'falid';if( FALSE === $secret=$this->checkFrom($data) ){$msg = 'the from is not defined';}elseif(FALSE === $this->checkTime($data)){$msg = 'the sign is overdue';}elseif(FALSE === $this->checkSign($data,$secret)){$msg = 'the sign is wrong';}else{$err = 2;$msg = 'ok';}return array('err'=>$err,'msg'=>$msg);}private function checkSign($data,$secret){$sign = isset($data[self::SIGN]) ? $data[self::SIGN] : FALSE;if(!$sign ){return FALSE;}elseif($sign != $this->create($data,$secret)){return FALSE;}else{return TRUE;}}private function checkTime($data){if(! isset($data[self::TIME])){return FALSE;}elseif( self::TIMEOUT < intval(time()-$data[self::TIME]) ){return FALSE;}else{return TRUE;}}private function checkFrom($data){if( ! isset($this->froms[$data[self::FROM]]) ){return FALSE;}else{return $this->froms[$data[self::FROM]];}}}

Sign签名生成与校验相关推荐

  1. 生成sign(签名),以及校验工具类

    生成sign(签名),以及校验工具类 package cn.weixiuhui.support.comm.utils; import java.io.IOException; import java. ...

  2. 服务器生成微信sign,签名生成方法

    开发者服务端在与微投票服务器交互的过程中,需要对参数进行加签等操作,下边介绍具体规则. 一.服务端 1.请求微投票接口,需要根据参数生成一个签名(sign)并携带在参数中进行请求,最终的请求形式如下: ...

  3. php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)

    /组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的16 ...

  4. 前端生成sign签名

    接着上一篇博文写写前端如何生成sign签名,此处生成的签名和前两篇的(sign签名)中验证是一致的,可以对比使用.使用方式在上一篇(vue中post请求使用form表单格式发送数据)中使用过,可参考 ...

  5. sign python_python实现sign签名

    sign签名是用于提供给外部(第三方)调用的接口,调用方需要提供正确的appkey钥匙才能调用,确保了接口的安全性. 签名参数sign生成方法: 假设有请求参数如下: appkey = "1 ...

  6. python中sign函数图片_python接口自动化-实现sign签名(MD5加密)

    一,前序 今天在学习sign签名的的时候,了解了下常用的sign加密算法,突然心血来潮,想用python试着将签名生成的通用步骤用代码实现出来,虽然中间经历了一点小波折,请教了开发同事后,按照他给的思 ...

  7. laya 怎么生成签名_PHP开发API接口签名生成及验证

    开发过程中,我们经常会与接口打交道,有的时候是调取别人网站的接口,有的时候是为他人提供自己网站的接口,但是在这调取的过程中都离不开签名验证. 我们在设计签名验证的时候,请注意要满足以下几点: 可变性: ...

  8. python封装第三方接口_PYTHON 实现 SIGN 签名: 用于提供给外部(第三方) 做系统对接...

    简介 sign 签名是用于提供给外部(第三方)调用的接口,调用方需要提供正确的 appkey 钥匙才能调用,确保了接口的安全性. 前言 在 app 开放接口 api 的设计中,避免不了的就是安全性问题 ...

  9. Java—通过sign签名认证实现安全的开放接口API

    关注微信公众号:CodingTechWork,一起学习进步. 文章目录 引言 API接口 timestamp保证唯一性 shell生成timestamp java生成timestamp模板 sign签 ...

最新文章

  1. ViewPager 的点击事件回调
  2. tomcat安装apr优化
  3. PowerShell2.0之桌面计算机维护(八)关闭或重启远程计算机
  4. C/C++在Android开发中的应用
  5. Linux 在一个命令行上执行多个命令
  6. HDU 1225 覆盖的面积
  7. docker安装postgres
  8. 电机的入门之路系列5--二相四线,四相五线,四相六线电机的区分方法
  9. matla工具箱 SerialLink 的一些最近发现的功能
  10. 自学python推荐书-学习python求推荐一波书籍?
  11. 2022美赛备赛资料大全
  12. XRD测试的68个问题(四)
  13. 数字经济是党和国家定下的重要发展战略
  14. python分号_在Python中拆分分号分隔的字符串
  15. Linux TC 流量限速
  16. beini奶瓶-无线网络蹭网破解-简明说明
  17. 【C语言】详解 calloc 函数用法
  18. unity2D横版游戏教程-3 Cinemachine镜头移动
  19. 直播平台开发中解决iOS 14 兼容问题和静默推送
  20. mysql报“ASCII\0appearedinthestatement“

热门文章

  1. python大数据计算_大数据计算平台 python
  2. mysql rls_DBMS_RLS包实现数据库表行级安全控制
  3. 2022年黄石市高企申报奖励补贴以及认定奖励补贴汇总!
  4. 一。回合制游戏 加暴击 掉落 二。柜台商品管理系统
  5. 计算机组成与体系结构——计算机体系结构分类-Flynn——2020.11.19
  6. coreldraw2023安装教程及新功能讲解
  7. 整理的java基础知识点笔记
  8. em表示什么长度单位_css中pt、px、em、ex、in等这类长度单位详细说明
  9. 利用MEGA计算π值和Ka/Ks
  10. SQL面试必考——计算留存率