0

0

PHP接口开发数据签名程序代码

php中文网

php中文网

发布时间:2016-06-08 17:19:37

|

1961人浏览过

|

来源于php中文网

原创

PHP接口开发数据签名这个非常的重要不但要有好的算法同时也要保密了,下面我们来看一篇由php实现的关于PHP接口开发数据签名例子吧,具体如下所示。

现在应用开发中通常会用到接口,其数据是通过开放的互联网传输,对数据的安全性有一定要求,为了防止数据在传输过程中被篡改,常用数据签名(sign)的方式来校验。

数据签名sign生成方法

本地宝团购导航网站
本地宝团购导航网站

本地宝团购导航网站v1.2是由本地宝提供API接口调取团购数据,使用本程不用管理接口、数据采集,只需将程序放在网站某文件夹或域名下。程序是经过SEO优化,对提升网站流量有很大帮助,如果你的网站支持rewrite伪静态的话,你可以开启伪静态功能。 后台使用 后台地址:http://域名/admin 帐号密码:jiahai jiahai

下载

①去除数组中的空值和签名参数(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 . "类型的签名方式");
    }
}

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

7

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

8

2026.02.05

控制反转和依赖注入区别
控制反转和依赖注入区别

本专题整合了控制反转和依赖注入区别、解释、实现方法相关内容。阅读专题下面的文章了解更多详细教程。

11

2026.02.05

钉钉脑图插图教程合集
钉钉脑图插图教程合集

本专题整合了钉钉脑图怎么插入图片、钉钉脑图怎么用相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.02.05

python截取字符串方法汇总
python截取字符串方法汇总

本专题整合了python截取字符串方法相关合集,阅读专题下面的文章了解更多详细内容。

2

2026.02.05

Java截取字符串方法合集
Java截取字符串方法合集

本专题整合了Java截取字符串方法汇总,阅读专题下面的文章了解更多详细操作教程。

1

2026.02.05

java 抽象方法
java 抽象方法

本专题整合了java抽象方法定义、作用教程等内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.05

Eclipse创建jsp文件教程合集
Eclipse创建jsp文件教程合集

本专题整合了Eclipse创建jsp文件、创建jsp项目等等内容,阅读专题下面的文章了解更多详细教程。

26

2026.02.05

java 字符串转数字
java 字符串转数字

本专题整合了java如何字符串转数字相关内容,阅读专题下面的文章了解更多详细教程。

4

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号