当前位置: 首页 > news >正文

网站ps照片怎么做的网站开发系统流程图

网站ps照片怎么做的,网站开发系统流程图,深圳工业设计展2021,网站职能文章目录 签名生成说明签名生成示例代码签名校验示例代码 签名生成说明 B项目需要调用A项目的接口#xff0c;由A项目为B项目分配 AccessKey 和 SecretKey#xff0c;用于接口加密#xff0c;确保不易被穷举#xff0c;生成算法不易被猜测。 最终需要确保包含签名的参数只… 文章目录 签名生成说明签名生成示例代码签名校验示例代码 签名生成说明 B项目需要调用A项目的接口由A项目为B项目分配 AccessKey 和 SecretKey用于接口加密确保不易被穷举生成算法不易被猜测。 最终需要确保包含签名的参数只能被有效的请求一次重复请求则视为无效参数并且设定参数有效时长例如5分钟超时则视为无效参数。 AccessKey 和 SecretKey分配 测试环境 ACCESS_KEY test_access SECRET_KEY test_secret正式环境另行配置假设A项目和B项目通过json格式传递参数在PHP中对请求的json参数转化为数组然后对原本的请求参数追加如下字段值 AccessKey已分配的请求key固定值timestamp当前毫秒时间戳nonce唯一随机10位字符串15分钟内不允许重复 例如原本的请求参数 $params 为 Array ([ToUserName] wxdd5624bd15b1691a[FromUserName] sys[CreateTime] 1717554600[MsgType] event[Event] sys_approval_change[AgentID] 1000043 )对 $params 追加 AccessKey 和 timestamp 和 nonce 之后 Array ([ToUserName] wxdd5624bd15b1691a[FromUserName] sys[CreateTime] 1717554600[MsgType] event[Event] sys_approval_change[AgentID] 1000043[AccessKey] test_access[timestamp] 1717659814771[nonce] 6bc6f34969 )将 $params 的 key 值按照字母升序排列PHP中的 ksort 函数 Array ([AccessKey] test_access[AgentID] 1000043[CreateTime] 1717554600[Event] sys_approval_change[FromUserName] sys[MsgType] event[ToUserName] wxdd5624bd15b1691a[nonce] 756c577626[timestamp] 1717659831355 )然后将上述参数赋给一个临时的变量例如$tmp_params并且拼接 SecretKey然后整体json_encode再次md5之后得到sign值代码如下 $sign md5(json_encode($tmp_params, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));将 sign值 追加到 $params 参数中注意是$params参数不是 $tmp_params 最终参数如下 Array ([AccessKey] test_access[AgentID] 1000043[CreateTime] 1717554600[Event] sys_approval_change[FromUserName] sys[MsgType] event[ToUserName] wxdd5624bd15b1691a[nonce] 137c128684[timestamp] 1717660145228[sign] ff0ea47d561eb2d9735771f0bc85ad33 )将上述参数转化为json后作为最终的请求参数 {AccessKey: test_access,AgentID: 1000043,CreateTime: 1717554600,Event: sys_approval_change,FromUserName: sys,MsgType: event,ToUserName: wxdd5624bd15b1691a,nonce: fb212b7327,timestamp: 1717660335729,sign: 9e5321b10ddc975b89a228e94d8e5f04 }签名生成示例代码 public function createSign() {$mock_json {ToUserName: wxdd5624bd15b1691a,FromUserName: sys,CreateTime: 1717554600,MsgType: event,Event: sys_approval_change,AgentID: 1000043};$params json_decode($mock_json, true);//对原本的请求参数追加如下字段值$params[AccessKey] test_access; //已分配的请求key固定值$params[timestamp] intval(microtime(true) * 1000); //当前毫秒时间戳$params[nonce] substr(uniqid(), -6) . rand(1000, 9999); //唯一随机10位字符串15分钟内不允许重复//按照上述所有请求参数的key值的字母升序排列PHP中的 ksort 函数ksort($params);//然后将上述参数赋给一个临时的变量并且拼接 SecretKey, 然后整体json_encode再次md5之后得到sign值$tmp_params $params;$tmp_params[SecretKey] test_secret;$sign md5(json_encode($tmp_params, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));//将 sign值 追加到 $params 参数中注意是$params参数不是 $tmp_params $params[sign] $sign;//将上述参数转化为json后作为最终的请求参数echo json_encode($params, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); }签名校验示例代码 ?phpclass Demo {//时间常量const TIME_OUT 300; //超时时间 5分钟const NONCE_INTERVAL 900; //允许nonce时间间隔 15分钟/*** 签名验证* param $params array 客户端请求来的原本的参数数组* return array* throws \Exception*/public function checkSign($params){$request_params $params;if (empty($params[timestamp]) || empty($params[nonce]) || empty($params[sign])) {throw new \Exception(签名基础参数校验失败, 201);}//校验超时$timestamp intval($params[timestamp] / 1000);if (abs(time() - $timestamp) self::TIME_OUT) {throw new \Exception(请求参数已超时, 201);}//从配置文件中读取ACCESS_KEY和SECRET_KEY$access_key env(ACCESS_KEY);$secret_key env(SECRET_KEY);if (empty($access_key) || empty($secret_key)) {throw new \Exception(NEW_CRM_REQUEST配置异常, 201);}if ($access_key ! $params[AccessKey]) {throw new \Exception(无效的AccessKey, 201);}$nonce_key test_nonce: . $params[timestamp] . _ . $params[nonce];$exist_nonce RedisUtils::init()-get($nonce_key);if ($exist_nonce) {throw new \Exception(无效的nonce值, 201);}$sign $params[sign];unset($params[sign]);ksort($params);$params[SecretKey] $secret_key;$params_json json_encode($params, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);$params_sign md5($params_json);if ($params_sign ! $sign) {//todo 写入错误log 或 发送报警信息//todo 校验频繁请求失败的IP可以考虑将这些IP加入黑名单throw new \Exception(签名校验失败, 201);}RedisUtils::init()-set($nonce_key, 1, self::NONCE_INTERVAL);unset($params[AccessKey]);unset($params[SecretKey]);unset($params[nonce]);unset($params[timestamp]);return $params;} }最终效果同样的请求参数如果被抓包再次请求就会失败
http://www.hkea.cn/news/14466332/

相关文章:

  • 网站主机一般选哪种的长沙0731房地产网
  • 有免费建站的网站宁波seo外包快速推广
  • 做网站功能的框架结构图网站的排版好看
  • cad二次开发网站云南省网站建设收费调查报告论文
  • 暴雪时分电视剧免费观看网站建设包含seo吗
  • 2017年做啥网站致富本地网站怎么建设
  • 360网站弹窗推广怎么做的可以先做网站后备案吗
  • 中国四大门户网站分别是wordpress单点sso
  • 做电商网站需要的证php培训学校网站源码
  • 株洲专业建设网站长春网站改版
  • 中山网站制作网页申请一家公司需要多少钱
  • 湖北省建设工程造价管理协会网站拱墅区哪里有网站建设
  • 莆田外贸网站建设ci策划 网站开发
  • html网站要怎么做wordpress 目录排序
  • 网站建设 更新 维护网上注册公司需要多长时间
  • 酒类网站建设方案长治软件制作平台
  • 怎么做一个网站的logo设计图山西省城乡住房和建设厅网站首页
  • 做网站架构莞城网站建设公司
  • 母婴网站建设方案企业网站系统有哪些
  • 关于网站开发的请示个人养老保险可以补交吗
  • 深圳住建厅官方网站电脑优化大师官方免费下载
  • 财经直播的网站开发一个多少钱手机网站建设基本流程
  • 建立网站和小程序需要多少钱做商业地产常用的网站
  • 企业营销网站模板免费下载广东朝阳企讯通科技有限公司
  • 石家庄常规网站建设私人定做推广平台有哪些app
  • 楚雄市住房和城乡建设局门户网站怎么做二次元网站源码
  • cms做的网站胡源代码东莞广告设计公司排名
  • 新干网站新干今年有哪些重大建设网站建设优化服务策划
  • 泰安中商网络做的网站怎么进入住房和城乡建设部官方网站办事大厅
  • 深圳网站建设有限公司怎样加入好大夫网站做医生