PHP接口开发数据签名程序代码
发布:smiling 来源: PHP粉丝网 添加日期:2017-03-23 10:43:57 浏览: 评论:0
PHP接口开发数据签名这个非常的重要不但要有好的算法同时也要保密了,下面我们来看一篇由php实现的关于PHP接口开发数据签名例子吧,具体如下所示。
现在应用开发中通常会用到接口,其数据是通过开放的互联网传输,对数据的安全性有一定要求,为了防止数据在传输过程中被篡改,常用数据签名(sign)的方式来校验。
数据签名sign生成方法:
①去除数组中的空值和签名参数(sign/sign_type)
②按键名升序排列数组
③把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
④把拼接后的字符串再与安全校验码直接连接起来
⑤MD5等加密函数,加密字符串
示例代码:
- class Sign {
- /**
- * 获取数据签名
- *
- * @param array $param 签名数组
- * @param string $code 安全校验码
- * @param string $sign_type 签名类型
- * @return string 签名字符串
- */
- public static function getSign($param, $code, $sign_type = 'MD5'){
- //去除数组中的空值和签名参数(sign/sign_type)
- $param = self::paramFilter($param);
- //按键名升序排列数组
- $param = self::paramSort($param);
- //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
- $param_str = self::createLinkstring($param);
- //把拼接后的字符串再与安全校验码直接连接起来
- $param_str = $param_str . $code;
- //创建签名字符串
- return self::createSign($param_str, $sign_type);
- }
- /**
- * 校验数据签名
- *
- * @param string $sign 接口收到的签名
- * @param array $param 签名数组
- * @param string $code 安全校验码
- * @param string $sign_type 签名类型
- * @return boolean true正确,false失败
- */
- public static function checkSign($sign, $param, $code, $sign_type = 'MD5'){
- return $sign == self::getSign($param, $code, $sign_type);
- }
- /**
- * 去除数组中的空值和签名参数
- *
- * @param array $param 签名数组
- * @return array 去掉空值与签名参数后的新数组
- */
- private static function paramFilter($param){
- $param_filter = array();
- foreach ($param as $key => $val) {
- if($key == 'sign' || $key == 'sign_type' || !strlen($val)){
- continue;
- }
- $param_filter[$key] = $val;
- }
- return $param_filter;
- }
- /**
- * 按键名升序排列数组
- *
- * @param array $param 排序前的数组
- * @return array 排序后的数组
- */
- private static function paramSort($param){
- ksort($param);
- reset($param);
- return $param;
- }
- /**
- * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
- *
- * @param array $param 需要拼接的数组
- * @return string 拼接完成以后的字符串
- */
- private static function createLinkstring($param){
- $str = '';
- foreach ($param as $key => $val) {
- $str .= "{$key}={$val}&";
- }
- //去掉最后一个&字符
- $str = substr($str, 0, strlen($str) - 1);
- //如果存在转义字符,那么去掉转义
- if(get_magic_quotes_gpc()){
- $str = stripslashes($str);
- }
- return $str;
- }
- /**
- * 创建签名字符串
- *
- * @param string $param 需要加密的字符串
- * @param string $type 签名类型 默认值:MD5
- * @return string 签名结果
- */
- private static function createSign($param, $type = 'MD5'){
- $type = strtolower($type);
- if($type == 'md5'){
- return md5($param);
- }
- if($type == 'dsa'){
- exit('DSA 签名方法待后续开发,请先使用MD5签名方式');
- }
- exit("接口暂不支持" . $type . "类型的签名方式");
- }
- }
Tags: 接口 代码 程序
相关文章
- ·php SimpleXML读写XML接口文件例子分析(2014-08-20)
- ·php常用的IP地址查询接口及调用方法(2015-04-08)
- ·php 微信发红包接口测试实例(2015-12-24)
- ·接口返回数据用xml好还是json理解(2016-01-20)
- ·超简单的php获取ip地址信息的接口范例(2016-01-20)
- ·微信公共平台开发接口之智能回复开发实例(2016-07-15)
- ·php调用新浪微博短链接api接口地址例子(2016-07-27)
- ·PHP中抽象类和接口的区别与例子(2016-07-27)
- ·php怎么写api接口?php写api接口的实例代码(2018-07-01)
- ·php怎么写api接口 代码怎么写(2018-07-12)
- ·PHP中抽象类、接口的区别与选择分析(2019-11-05)
- ·接口隔离原则是什么?(2020-02-17)
- ·PHP接口--curl请求导致接收到报文不完整解决办法(2020-03-05)
- ·PHP调用百度天气接口API实现查询实时天气(2020-03-28)
- ·免费手机号码归属地API查询接口和PHP使用实例分享(2020-11-08)
- ·php版淘宝网查询商品接口代码示例(2021-02-21)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)