當前位置:首頁 > PHP教程 > php應用 > 列表

PHP接口開發數據簽名程序代碼

發布:smiling 來源: PHP粉絲網  添加日期:2017-03-23 10:43:57 瀏覽: 評論:0 

PHP接口開發數據簽名這個非常的重要不但要有好的算法同時也要保密了,下面我們來看一篇由php實現的關于PHP接口開發數據簽名例子吧,具體如下所示。

現在應用開發中通常會用到接口,其數據是通過開放的互聯網傳輸,對數據的安全性有一定要求,為了防止數據在傳輸過程中被篡改,常用數據簽名(sign)的方式來校驗。

數據簽名sign生成方法:

①去除數組中的空值和簽名參數(sign/sign_type)

②按鍵名升序排列數組

③把數組所有元素,按照“參數=參數值”的模式用“&”字符拼接成字符串

④把拼接后的字符串再與安全校驗碼直接連接起來

⑤MD5等加密函數,加密字符串

示例代碼:

  1. class Sign { 
  2.  
  3.     /** 
  4.      * 獲取數據簽名 
  5.      *  
  6.      * @param  array  $param  簽名數組 
  7.      * @param  string $code      安全校驗碼 
  8.      * @param  string $sign_type 簽名類型 
  9.      * @return string        簽名字符串 
  10.      */ 
  11.     public static function getSign($param$code$sign_type = 'MD5'){ 
  12.         //去除數組中的空值和簽名參數(sign/sign_type) 
  13.         $param = self::paramFilter($param); 
  14.         //按鍵名升序排列數組 
  15.         $param = self::paramSort($param); 
  16.         //把數組所有元素,按照“參數=參數值”的模式用“&”字符拼接成字符串 
  17.         $param_str = self::createLinkstring($param); 
  18.         //把拼接后的字符串再與安全校驗碼直接連接起來 
  19.         $param_str = $param_str . $code
  20.         //創建簽名字符串 
  21.         return self::createSign($param_str$sign_type); 
  22.     } 
  23.       
  24.     /** 
  25.      * 校驗數據簽名 
  26.      * 
  27.      * @param  string $sign  接口收到的簽名 
  28.      * @param  array  $param  簽名數組 
  29.      * @param  string $code      安全校驗碼 
  30.      * @param  string $sign_type 簽名類型 
  31.      * @return boolean true正確,false失敗 
  32.      */ 
  33.     public static function checkSign($sign$param$code$sign_type = 'MD5'){ 
  34.         return $sign == self::getSign($param$code$sign_type); 
  35.     } 
  36.       
  37.     /** 
  38.      * 去除數組中的空值和簽名參數 
  39.      *  
  40.      * @param  array $param 簽名數組 
  41.      * @return array        去掉空值與簽名參數后的新數組 
  42.      */ 
  43.     private static function paramFilter($param){ 
  44.         $param_filter = array(); 
  45.         foreach ($param as $key => $val) { 
  46.             if($key == 'sign' || $key == 'sign_type' || !strlen($val)){ 
  47.                 continue
  48.             } 
  49.             $param_filter[$key] = $val
  50.         } 
  51.         return $param_filter
  52.     } 
  53.       
  54.     /** 
  55.      * 按鍵名升序排列數組 
  56.      *  
  57.      * @param  array $param 排序前的數組 
  58.      * @return array        排序后的數組 
  59.      */ 
  60.     private static function paramSort($param){ 
  61.         ksort($param); 
  62.         reset($param); 
  63.         return $param
  64.     } 
  65.       
  66.     /** 
  67.      * 把數組所有元素,按照“參數=參數值”的模式用“&”字符拼接成字符串 
  68.      *  
  69.      * @param  array $param 需要拼接的數組 
  70.      * @return string       拼接完成以后的字符串 
  71.      */ 
  72.     private static function createLinkstring($param){ 
  73.         $str = ''
  74.         foreach ($param as $key => $val) { 
  75.             $str .= "{$key}={$val}&"
  76.         } 
  77.         //去掉最后一個&字符 
  78.         $str = substr($str, 0, strlen($str) - 1); 
  79.         //如果存在轉義字符,那么去掉轉義 
  80.         if(get_magic_quotes_gpc()){ 
  81.             $str = stripslashes($str); 
  82.         } 
  83.         return $str
  84.     } 
  85.       
  86.     /** 
  87.      * 創建簽名字符串 
  88.      *  
  89.      * @param  string $param 需要加密的字符串 
  90.      * @param  string $type  簽名類型 默認值:MD5 
  91.      * @return string 簽名結果 
  92.      */ 
  93.     private static function createSign($param$type = 'MD5'){ 
  94.         $type = strtolower($type); 
  95.         if($type == 'md5'){ 
  96.             return md5($param); 
  97.         } 
  98.         if($type == 'dsa'){ 
  99.             exit('DSA 簽名方法待后續開發,請先使用MD5簽名方式'); 
  100.         } 
  101.         exit("接口暫不支持" . $type . "類型的簽名方式"); 
  102.     } 

Tags: 接口 代碼 程序

分享到:

福利彩票25选5开奖结果