搜尋
首頁php教程PHP源码PHP接口开发数据签名程序代码

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

<script>ec(2);</script>

现在应用开发中通常会用到接口,其数据是通过开放的互联网传输,对数据的安全性有一定要求,为了防止数据在传输过程中被篡改,常用数据签名(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 . "类型的签名方式");
    }
}

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境