php數據接口api安全,API接口數據安全之授權碼sign

**API接口數據安全之授權碼sign**

>[success] 1. ASE加密方式加密

~~~

class Aes{

private $key = null;

/**

*@param String $key 密鑰

*@return String

*/

public funciton __construct(){

//配置文件中的asekey 服務端及客戶端必須保持一致 且加密key必須為16 、32、64位

$this->key = C('app.asekey');

}

/**

*加密

*@param String input 加密的字符串

*@param String key 解密的key

*@return HexString

*/

public function encrypt($input=''){

$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB); // 獲得加密算法的分組大小

$input = $this->pkcs5_pad($ipunt,$size);

$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_ECB,'');

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_RAND);

mcrypt_generic_init($td,$this->key,$iv);

$data = mcrypt_generic($td,$input);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

$result = base64_encode($data);

return $result;

}

/**

*填充方式 pkcs5

*@param String text 原始字符串

*@param String blocksize 加密長度

*@return String

*/

private function pkcs5_pad($text,$blocksize){

$pad = $blocksize-(strlen($text) % $blocksize);

return $text.str_repeat(chr($pad),$pad);

}

/**

*解密

*@param String str 加密的字符串

*@param String key 解密的key

*@return String

*/

public function decrypt($str){

$decryted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$this->key,base64_decode($str),MCRYPT_MODE_ECB);

$dec_s = strlen($decryted);

$padding = ord($decryted[$dec_s-1]);

$decryted = substr($decryted,0,-$padding);

return $decryted;

}

}

~~~

>[success]2.生成加密后的sign

~~~

/**

*生成請求的sign

*@param array $data

*@return string

*/

function setSign($data=array()){

//1.按字段排序

ksort($data);

// 2.拼接字符串數據 &

$string = http_build_query($data);

// 3.通過aes來加密

$sign = (new Aes())->encrypt($string);

return $sign;

}

//示例

$data = [

'did' => '12345dg',

'version' => '1.0'

];

$sign = setSign($data); //ne2qhhj4x3abeHKH+mhNV04USjWNzhkA5bcB7bxH4EA=

~~~

>[success]3.解密sign

~~~

$sign = "ne2qhhj4x3abeHKH+mhNV04USjWNzhkA5bcB7bxH4EA=";

echo (new Aes())->decrypt($sign); // did=12345dg&version=1.0

~~~

>[success]4.校驗客戶端的sign

~~~

/**

*@param Stirng clientSign 通過客戶端的header頭傳遞過來

*@param Array data 客戶端提交過來的字段

*@return boolen

*/

function checkSign($clientSign='',$data=array()){

if(empty($clientSign)){

return false;

}

$checkSign = setSign($data); // 生成sign

if($clientSign != $checkSign){

return false;

}

return true;

}

~~~

**函數**

>[danger] parse_str() 函數的使用

~~~

$str = "did=12345dg&version=1.0";

parse_str($str,$arr);

var_dump($arr);die;

結果為:

array(2) {

["did"]=>

string(7) "12345dg"

["version"]=>

string(3) "1.0"

}

~~~

>[danger]http_build_query()函數的使用

~~~

$data = array(

'did'=> '12345dg',

'version'=> '1.0'

);

$str = http_build_query($data);

echo $str; // did=12345dg&version=1.0 將數組以&拼接

~~~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385857.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385857.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385857.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java環境變量的配置與詳解,這些知識你必須拿下

1.三重心智模型 先給大家科普一個概念,“三重心智模型”。 認知科學家斯坦諾維奇,將人的心智模式,分成了三個部分。 第一層是自主心智,自主心智是我們通過進化與內隱學習獲得。比如,我們看到蛇就會害怕,情…

centos php安裝redis擴展,Centos7編譯安裝redis、php安裝phpredis擴展

解壓 進入 make:# tar zxvf redis-4.0.9.tar.gz# cd redis-4.0.9/# make# cd src# make install為了方便管理,將Redis文件中的配置文件和常用命令移動到統一文件中:# mkdir –p /usr/local/redis/bin# mkdir –p /usr/local/redis/etc# cp /t…

java環境變量的配置步驟,實現原理分析

1.筆試常見的問題? 面試常見的問題上面給的面試題鏈接基本都有。我只提幾點: 寫SQL:寫SQL很常考察group by、內連接和外連接。手寫代碼:手寫代碼一般考單例、排序、線程、消費者生產者。我建議排序算法除了冒泡排序,…

php 方法參數傳遞,在PHP中將實例方法作為參數傳遞

我想創建一個Listener類class Listener {var $listeners array();public function add(callable $function) {$this->listeners[] $function;}public function fire() {foreach($this->listeners as $function) {call_user_func($function);}}}class Foo {public funct…

java環境安裝包出現覆蓋,請查收

正文 先問小伙伴們一個問題,登錄難嗎?“登錄有什么難得?輸入用戶名和密碼,后臺檢索出來,校驗一下不就行了。”凡是這樣回答的小伙伴,你明顯就是產品思維,登錄看似簡單,用戶名和密碼…

java生成json字符串,威力加強版

策略 1——停止挖掘 Law of Holes 是說當自己進洞就應該停止挖掘。對于單體式應用不可管理時這是最佳建議。換句話說,應該停止讓單體式應用繼續變大,也就是說當開發新功能時不應該為舊單體應用添加新代碼,最佳方法應該是將新功能開發成獨立微…

MATLAB小波軟硬閾值去噪代碼,matlab編程小波變換進行圖像去噪處理,包括各種軟硬閾值的選取函數...

內容:matlab編程小波變換進行圖像去噪處理,包括各種軟硬閾值的選取函數,%小波閾值去噪clear allclc;fimread(graylena.bmp);fdouble(f);ssize(f);rimnoise2(gaussian,s(1),s(2),0,20);%填加高斯白噪聲fnoisyfr;%對圖像進行三層小波分解[c,s]w…

java生成二維碼讀取二維碼,面試真題解析

拼多多一面 首先自我介紹 參加過哪些項目 并發編程三要素? 實現可見性的方法有哪些? 多線程的價值? 創建線程的三種方式的對比? 畫出線程的狀態流轉圖 常用的并發工具類有哪些? CyclicBarrier 和 CountDownLatch 的區…

iis 7.5 php 防止跨站,iis安全---防范XSS跨站式腳本攻擊

iis安全---防范XSS跨站式腳本攻擊網站要怎么防范常見的XSS跨站式腳本攻擊呢,我們先從XSS跨站式腳本攻擊的原理來說起。網站遭受XSS跨站式腳本攻擊的基本原理1.本地利用漏洞,這種漏洞存在于頁面中客戶端腳本自身。其攻擊過程如下所示:A給B發送…

Java春招實習面試經驗匯總,面試篇

Part1 SpringIOC 學習Spring最重要的無非是Spring IOC以及Spring AOP,首先咱們把Spring IOC吃透,以下內容將截圖展示。 Spring IOC主要學習內容分為以下7點: ①Spring框架 ②Spring lOC容器Bean對象實例化模擬實現 ③Spring IOC容器Bean對象…

Java最新大廠面試真題總結,瞬間高大上了!

什么是分布式鎖?在回答這個問題之前,我們先回答一下什么是鎖。 普通的鎖,即在單機多線程環境下,當多個線程需要訪問同一個變量或代碼片段時,被訪問的變量或代碼片段叫做臨界區域,我們需要控制線程一個一個…

php列表框怎么用,PHP+Mysql+jQuery查詢和列表框選擇操作實例講解

這篇文章主要介紹了PHPMysqljQuery查詢和列表框選擇操作實現過程,需要的朋友可以參考下本文講解如何通過ajax查詢mysql數據,并將返回的數據顯示在待選列表中,再通過選擇最終將選項加入到已選區,可以用在許多后臺管理系統中。本文列…

Java未來路在何方?圖文詳解!

Spring Security觀后感——手繪思維腦(供參考) Spring Security手繪思維腦圖 手繪的思維導圖,是我自己根據自身的情況讀完這套阿里出品的Spring Security王者晉級文檔之后所繪的,相當于是一個知識的總結與梳理,我將其分為***“核心組件”與“…

matlab怎讓3d旋轉,如何在MATLAB中平滑旋轉3D繪圖?

我會說這是你正在繪制的大量積分導致經濟放緩.一個選項是縮減采樣..也可以使用較低級別的功能進行繪制(檢查this related post以獲得plot3 / scatter3 / line性能的比較).考慮以下針對速度優化的動畫:[X Y Z] sphere(64);X X(:); Y Y(:); Z Z(:);%# set-up figu…

Java未來路在何方?挑戰大廠重燃激情!

字節跳動一面: 自我介紹,主要講講做了什么和擅長什么看你項目做Spring比較多, 問一下Spring相關的東西, IoC是什么概念?Bean的默認作用范圍是什么?其他的作用范圍?索引是什么概念有什么作用? MySQL里主要有哪些索弓|結構?哈希索弓和B樹索引比較?平常用線程主…

php如何修改文件名,php修改文件名的實現方法_后端開發

c是什么意思_后端開發C是C語言的繼承,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型為特點的基于對象的程序設計,還可以進行以繼承和多態為特點的面向對象的程序設計。php修改文件名的實現方法在php中可以使用rename函數修改文…

Java架構師必備框架技能核心筆記,工作感悟

01 kafka入門 1.1 什么是kafka 1.2 kafka中的基本概念 1.2.1 消息和批次 1.2.2 主題和分區 1.2.3 生產者和消費者、偏移量、消費者群組 1.2.4 Broker和集群 1.2.5 保留消息 02 為什么選擇kafka 2.1 優點 2.2 常見場景 2.2.1 活動跟蹤 2.2.2 傳遞消息 2.2.3 收集指標和日志 2.2.…

java將某個數按比例分配應用題,按比例分配應用題

按比例分配(一)1、甲乙兩數的和是72,甲乙兩數的比是4:5,甲、乙兩數各是多少?。2、一個等腰三角形,頂角和一個底角的比是1:4,這個三角形兩個底角各是多少。3、六(1)班有女生24人,女生和男生人數的比是4:5&am…

Java架構師必備框架技能核心筆記,附相關架構及資料

技術焦慮 現在的技術圈子很火熱,任何技術點,任何知識,只要你肯搜索,都能找到資料。但是現在技術圈確實有一個不好的地方,就是販賣焦慮。這種販賣焦慮的點并不在于形式,而是一種普遍的心態。特別是對于那種…

php智能裁剪黑邊,圖片裁剪去除黑邊

前言從瀏覽器保存的圖片有透明度,但是python打開其透明通道是黑色的,因此我利用python的OpenCV模塊去除了其上下左右的黑邊。效果展示計算機中效果python打開效果python裁剪后效果代碼import cv2def change_size(read_file):image cv2.imread(read_file…