亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

關于yii2中加密解密的問題

2020-03-22 17:56:04
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于yii2中加密解密的問題,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

 

前言

Yii提供了方便的幫助函數來讓你用一個安全秘鑰來加密解密數據。數據通過加密函數進行傳輸,這樣只有擁有安全秘鑰的人才能解密。比如,我們需要存儲一些信息到我們的數據庫中,但是,我們需要保證只有擁有安全秘鑰的人才能看到它(即使應用的數據庫泄露)。

大家也都知道,我們做程序的時候,加密解密是繞不開的話題,使用yii2開發應用的時候,都內置了哪些有關加密解密(安全)方便的支持那?本文將為你揭曉。

相關環境

操作系統及IDE macOS 10.13.1 PhpStorm2018.1.2

軟件版本 PHP7.1.8 Yii2.0.14

在yii2中,管理加密解密的庫叫做Security,它以yii2組件的形式存在,因此你可以通過Yii::$app- security來獲取并使用它。

Security組件源代碼位置如下

vendor/yiisoft/yii2/base/Security.php

Security組件一共有15個與加密解密( 編碼)相關的公共方法,我們先來列一個清單。

encryptByPassword

encryptByKey

decryptByPassword

decryptByKey

hkdf

pbkdf2

hashData

validateData

generateRandomKey

generateRandomString

generatePasswordHash

validatePassword

compareString

maskToken

unmaskToken

我想有一些你一定沒見過,沒關系,我們一一去了解。

generateRandomString

之所以先說generateRandomString是因為它最常用,起碼我是這樣。

 

html' target='_blank'>public function generateRandomString($length = 32){...}

 

生成一個隨機的字符串,參數$length代表這個字符串的長度,默認32位。值得說明的是這個字符串的取值為范圍是[A-Za-z0-9_-]。

generatePasswordHash validatePassword

generatePasswordHash validatePassword經常被用來加密用戶密碼以及對密碼是否正確的驗證,自從MD5可能被碰撞后,我們用yii2開發應用的時候,generatePasswordHash函數對密碼進行加密就成為首選了,它調用了crypt函數。

一般用法如下

 

// 使用generatePasswordHash為用戶的密碼加密,$hash存儲到庫中$hash = Yii::$app- getSecurity()- generatePasswordHash($password);// 使用validatePassword對密碼進行驗證if(Yii::$app- getSecurity()- validatePassword($password, $hash)){ // 密碼正確}else{ // 密碼錯誤}

 

generateRandomKey

和generateRandomString類似,生成一個隨機的串,參數為長度,默認為32位,區別在于generateRandomKey生成的不是ASCII。

簡單的說 generateRandomString 約等于 base64_encode(generateRandomKey)。

encryptByPassword decryptByPassword

編碼和解碼函數,使用一個秘鑰對數據進行編碼,然后通過此秘鑰在對編碼后的數據進行解碼。

例子

 

$dat = Yii::$app- security- encryptByPassword( hello , 3166886 echo Yii::$app- security- encryptByPassword($dat, 3166886 // hello

 

要注意,通過上面得到的編碼后的數據不是ASCII,可以通過base64_encode和base64_decode在外層包裝下。

encryptByKey decryptByKey

同樣是一組編碼和解碼函數,比通過密碼的方式要快。函數聲明為

 

public function encryptByKey($data, $inputKey, $info = null){}public function decryptByKey($data, $inputKey, $info = null){}

 

encryptByKey decryptByKey 存在著第三個參數,比如我們可以傳遞會員的ID等,這樣此信息將和$inputKey一起作為加密解密的鑰匙。

hkdf

使用標準的 HKDF 算法從給定的輸入鍵中導出一個鍵。在PHP7+使用的是hash_hkdf方法,小于PHP7使用hash_hmac方法。

pbkdf2

使用標準的 PBKDF2 算法從給定的密碼導出一個密鑰。該方法可以用來進行密碼加密,不過yii2有更好的密碼加密方案 generatePasswordHash。

hashData和validateData

有的時候為了防止內容被篡改,我們需要對數據進行一些標記,hashData和validateData就是完成這個任務的組合。

hashData 用來對原始數據進行加數據前綴,比如如下代碼

 

$result = Yii::$app- security- hashData( hello , 123456 ,false);// ac28d602c767424d0c809edebf73828bed5ce99ce1556f4df8e223faeec60eddhello

 

你看到了在hello的前面多了一組字符,這組字符會隨著原始數據的不同而變化。這樣我們就對數據進行了特殊的防止篡改標記,接下來是validateData上場了。

注意:hashData的第三個參數代表生成的哈希值是否為原始二進制格式. 如果為false, 則會生成小寫十六進制數字.

validateData 對已經加了數據前綴的數據進行檢測,如下代碼

 

$result = Yii::$app- security- validateData( ac28d602c767424d0c809edebf73828bed5ce99ce1556f4df8e223faeec60eddhello , 123456 ,false);// hello

 

如果返回了原始的字符串則表示驗證通過,否則會返回假。

validateData 函數的第三個參數應該與使用 hashData() 生成數據時的值相同. 它指示數據中的散列值是否是二進制格式. 如果為false, 則表示散列值僅由小寫十六進制數字組成. 將生成十六進制數字.

compareString

可防止時序攻擊的字符串比較,用法非常簡單。

 

Yii::$app- security- compareString( abc , abc 

 

結果為真則相等,否則不相等。

那么什么是時序攻擊那?我來舉一個簡單的例子。

 

if($code == Yii::$app- request- get( code )){}

 

上面的比較邏輯,兩個字符串是從第一位開始逐一進行比較的,發現不同就立即返回 false,那么通過計算返回的速度就知道了大概是哪一位開始不同的,這樣就實現了電影中經常出現的按位破解密碼的場景。

而使用 compareString 比較兩個字符串,無論字符串是否相等,函數的時間消耗是恒定的,這樣可以有效的防止時序攻擊。

maskToken unmaskToken

maskToken用于掩蓋真實token且不可以壓縮,同一個token最后生成了不同的隨機令牌,在yii2的csrf功能上就使用了maskToken,原理并不復雜,我們看下源碼。

 

public function maskToken($token){ $mask = $this- generateRandomKey(StringHelper::byteLength($token)); return StringHelper::base64UrlEncode($mask . ($mask ^ $token));}

 

而unmaskToken目的也很明確,用于得到被maskToken掩蓋的token。

接下來我們看一個例子代碼

 

$token = Yii::$app- security- maskToken( 123456 echo Yii::$app- security- unmaskToken($token);// 結果為 123456

 

最后我們總結下

加密/解密: encryptByKey()、decryptByKey()、 encryptByPassword() 和 decryptByPassword();

使用標準算法的密鑰推導: pbkdf2() 和 hkdf();

防止數據篡改: hashData() 和 validateData();

密碼驗證: generatePasswordHash() 和 validatePassword()

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

以上就是關于yii2中加密解密的問題的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美肥老太性生活视频| 国产精品jizz在线观看麻豆| 日本亚洲精品在线观看| 国产精品日日摸夜夜添夜夜av| 91在线看www| 国产91网红主播在线观看| 国产精品国产福利国产秒拍| 久久影院中文字幕| 国产主播喷水一区二区| 日韩在线免费高清视频| 亚洲成人亚洲激情| 久久久久久久久久亚洲| 成人黄色大片在线免费观看| 日韩黄色在线免费观看| 久久亚洲成人精品| 国内精品一区二区三区四区| 国产在线观看精品| 亚洲综合精品一区二区| 亚洲图片欧洲图片av| 亚洲高清色综合| 久久久久久久久久久免费精品| 国产精品白丝jk喷水视频一区| 久久久久久91香蕉国产| 黄网动漫久久久| 欧美国产第一页| 久久亚洲精品网站| 免费成人高清视频| 精品色蜜蜜精品视频在线观看| 国产亚洲欧洲高清| 91精品国产91久久久久福利| 欧美性生交xxxxx久久久| 国产精品久久久久久中文字| 久久久亚洲欧洲日产国码aⅴ| 911国产网站尤物在线观看| 青青草精品毛片| 国产视频精品va久久久久久| 欧美极品少妇xxxxⅹ喷水| 亚洲mm色国产网站| 日韩av手机在线| 欧美成人午夜剧场免费观看| 久久精品中文字幕免费mv| 国内精品400部情侣激情| 人人澡人人澡人人看欧美| 精品亚洲一区二区三区四区五区| 久久精品美女视频网站| 亚洲伊人成综合成人网| 国产高清视频一区三区| 最新国产成人av网站网址麻豆| 亚洲一区二区中文| 亚洲性日韩精品一区二区| 欧美一级淫片videoshd| 亚洲综合大片69999| 久久深夜福利免费观看| 日韩av123| 这里只有精品视频在线| 精品国产欧美成人夜夜嗨| 91爱视频在线| 按摩亚洲人久久| 欧美成人精品一区| 亚洲电影中文字幕| 色综合91久久精品中文字幕| 97在线视频一区| 国产精品第2页| 亚洲精品成人免费| 国产精品日本精品| 久久精品美女视频网站| 亚洲成人精品av| 欧美网站在线观看| 午夜精品免费视频| 欧美日韩国产123| 亚洲成色www8888| 91精品久久久久久久久久久久久| 国产成人在线一区二区| 欧美激情视频一区二区| 97成人超碰免| 日本精品久久久久久久| 亚洲系列中文字幕| 992tv成人免费影院| 日韩欧美国产黄色| 亚洲精品欧美日韩专区| 日韩欧美国产黄色| 成人综合网网址| 91av免费观看91av精品在线| 亚洲精品一区二区三区婷婷月| 中文字幕综合在线| 国产69精品久久久| 国产精品免费看久久久香蕉| 色视频www在线播放国产成人| 欧美精品videofree1080p| 日韩欧美成人精品| 国产在线拍偷自揄拍精品| 亚洲黄色av网站| 成人女保姆的销魂服务| 91免费看国产| 国产精品久久久久久av福利| 日韩视频一区在线| 97成人精品区在线播放| 欧洲日韩成人av| 亚洲日本成人网| 国产精品99久久久久久人| 亚洲精品免费av| 日本精品视频在线观看| 亚洲精品suv精品一区二区| 欧美高清性猛交| 色噜噜狠狠狠综合曰曰曰| 国产午夜精品全部视频在线播放| 亚洲在线观看视频网站| 国产精品wwww| 国产精品久久久久久久久| 国产最新精品视频| 亚洲精品一二区| 91在线免费视频| 成人欧美一区二区三区在线湿哒哒| 欧美多人乱p欧美4p久久| 亚洲美女精品成人在线视频| 最近2019好看的中文字幕免费| 中文字幕亚洲专区| 欧美视频二区36p| 久久噜噜噜精品国产亚洲综合| 97免费中文视频在线观看| 国产美女高潮久久白浆| 亚洲最大av在线| 国产精品美腿一区在线看| 国产伦精品一区二区三区精品视频| 色悠悠国产精品| 91成品人片a无限观看| 久久久视频免费观看| 在线电影欧美日韩一区二区私密| 色综合色综合网色综合| 秋霞成人午夜鲁丝一区二区三区| 北条麻妃一区二区在线观看| 国产91精品网站| 久久人人看视频| 欧美亚洲成人精品| 97在线免费视频| 欧美丝袜美女中出在线| 欧美日韩一区二区免费在线观看| 久久久久久久91| 在线观看日韩av| 欧美香蕉大胸在线视频观看| 久久久女人电视剧免费播放下载| 亚洲伊人久久综合| 久久久久久久久久久免费| 欧美大码xxxx| 欧美日韩国产一区二区三区| 久久国产加勒比精品无码| 欧美丰满少妇xxxx| 国产精品一二三视频| 91久久久久久久一区二区| 亚洲成色www8888| 久久久久国产精品免费| 色樱桃影院亚洲精品影院| 亚洲精品一二区| 欧美精品在线网站| 日韩av网址在线观看| 欧美夫妻性生活视频| 国产精品久在线观看| 国产小视频国产精品| 色一区av在线| 亚洲激情电影中文字幕| 亚洲成人动漫在线播放| 精品国产电影一区| 91av在线视频观看| 国产成+人+综合+亚洲欧美丁香花|