php---进行签名验证
为什么要进行签名,我们在进行数据请求的时候,为了防止数据被人截取,造成不好的影响,所以我们在进行数据请求的时候,需要进行签名验证,进行签名的原理是:客户端和服务端使用同样的签名算法,来计算签名,当客户端提交的签名,和服务端提供的签名一致的时候,就签名成功。
这里是仿照微信验证的签名算法:需要用到 appid 和 appSecret。
具体实现:
/* 签名算法 */
public function sign(){
$appid = "dd9818820b95ec8e3d";
$appSecret = "e5178f68c37c3a24772e463deb8cc4d8";
$postData = array(
'appid'=>$appid,
'timestamp'=>'1544883104',
'nonce'=>md5(md5('dd9818820b95ec8e3d').'1544883104'),
'sign'=>'B016B5D43749E26775B260FBED08DDCA'
);
echo $this->getSignature()."<br>";
echo $this->checkSignature($postData)."<br>";
die;
}
public function checkSignature($data = null){
$appid = "dd9818820b95ec8e3d";
$appSecret = "e5178f68c37c3a24772e463deb8cc4d8";
if(!$data){return false;};
$clientSign = $data['sign'];
$array = array();
$array['appid'] = $data['appid'];
$array['timestamp'] = $data['timestamp'];
$array['nonce'] = $data['nonce'];
ksort($array);
$str = "";
foreach ($array as $k => $v) {
$str.= $k.$v;
}
$restr = $str.$appSecret;
$reserverSign = strtoupper(md5($restr));
if($clientSign == $reserverSign){
return true;
};
return false;
}
public function getSignature($array = array()){
$appid = "dd9818820b95ec8e3d";
$appSecret = "e5178f68c37c3a24772e463deb8cc4d8";
$array = array(
'appid'=>$appid,
'timestamp'=>'1544883104',
'nonce'=>md5(md5('dd9818820b95ec8e3d').'1544883104'),
);
// 1.对加密数组进行字典排序 防止因为参数顺序不一致而导致下面拼接加密不同
ksort($array);
// 2.将key和value进行拼接
$str = "";
foreach ($array as $k => $v) {
$str.= $k.$v;
}
// 3.通过sha1(或md5)加密并转化为大写
$restr = $str.$appSecret;
$sign = strtoupper(md5($restr));
return $sign;
}
public function getAppid($phone = "18314416390"){
return 'dd'.substr(md5(md5(time()).md5($phone).mt_rand(1,1000000)),0,16);
}
public function getAppSecret($phone = "18314416390"){
$key = '|Hx@IP9O]>6KFX\Z2(r[/?st1}^CNh+W4oQeDgS';
return md5(md5($key).md5($phone).md5(time()).mt_rand(1,1000000));
}
php---进行签名验证的更多相关文章
- WebApi安全性 使用TOKEN+签名验证
首先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候,会面临着许多的安全性问题, ...
- 开放api接口签名验证
不要急,源代码分享在最底部,先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候, ...
- api接口签名验证(MD5)
不要急,源代码分享在最底部,先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候, ...
- 【转】开放api接口签名验证
不要急,源代码分享在最底部,先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候, ...
- GPG操作——签名验证
问题描述: 可能大家都遇到过软件在下载过程中由于网络原因导致下载的软件体积与实际软件体积不符.最常见的办法是对待下载文件附加一个摘要文件.这种做法比较常见,也比较容易实现.但是,还是会有一个问题:如果 ...
- Crypto库实现PKCS7签名与签名验证
在windows中,可以直接使用微软提供的crypto库实现PKCS7签名与签名验证.签名接口函数为CryptSignMessage,其接口定义为: BOOL WINAPI CryptSignMess ...
- WebAPI 安全性 使用TOKEN+签名验证(上)
首先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候,会面临着许多的安全性问题, ...
- TOKEN+签名验证
TOKEN+签名验证 首先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候,会面 ...
- 对于百川SDK签名验证的问题
SDK是要在wantu.taobao.com生成的.而生成这个SDK其实是要上传一个apk,而这个上传其实就是取他的签名而已.验证就是那张yw222那张图片.重点是你上传的apk的签名是不是跟你的生成 ...
- WebAPI 用户认证防篡改实现HMAC(二)签名验证 AbsBaseAuthenticationAttribute--转
public class ActionFilter : ActionFilterAttribute { public override void OnActionExecu ...
随机推荐
- 2. 自动化运维系列之Cobbler给Openstack节点安装操作系统。
preface 我们在一篇博文知道了如何搭建Cobbler,那么下面就通过Cobbler来安抓Openstack所有节点吧. 服务器配置信息如下: 主机名 IP 角色 Cobbler.node.com ...
- CorelDRAW中关于锁定与解锁对象的操作
在编辑复制的图形时,有时为了避免对象受到操作的影响,可以使用“锁定与解锁对象”功能键对已经编辑好的对象进行锁定.被锁定的对象将不能进行任何编辑操作,本教程将详解CorelDRAW中关于锁定与解锁对象的 ...
- Java -- 异常的捕获及处理 -- 目录
7 异常的捕获及处理 7.1 异常的基本概念 7.1.1 为什么需要异常处理 7.1.2 在程序中使用异常处理 7.1.3 异常类的继承结构 7.1.4 Java的异常处理机制 7.2 throws与 ...
- ASP正则匹配方法
方法二:找到匹配的进行替换 ip="127.0.0.1" Function ReplaceTest(str,patrn, replStr) Dim regEx, str1 Set ...
- HttpClient(五)-- 模拟表单上传文件
1.maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId ...
- urllib 简介
(1) urllib 是 Python 内置的 HTTP 请求库,用来向服务器发送 HTTP 请求(2) 在 Python2.x 中,有 urllib 和 urllib2 两个模块:在 Python3 ...
- Apache Kafka 1.0.0正式发布!
千呼万唤始出来,经过7年的发展与完善,Apache Kafka 1.0.0正式发布!在笔者看来,比起1.0.0引入的新功能,此版本最大的意义在于标识Kafka各种组件功能的稳定性.不过我们还是来看下1 ...
- linux下getsockopt和setsockopt详解及测试
linux下getsockopt和setsockopt详解及测试 NAME 名字 getsockopt, setsockopt - get and set options on sockets 获取或 ...
- thinkjs2.2中的定时任务
暂且先讨论定时任务的其中两种实现方法: 1.setInterval() setInterval()可按照指定的周期(毫秒数计)来调用函数或者计算表达式: setInterval()方法会不停的调用该函 ...
- STL概论
一.STL简介 1.STL(Standard Template Library,标准模板库)是C++标准库最主要和最重要的组成部分.其重要作用在于: (1)它可以用来创建动态增长和减小的数据结构: ( ...