Yii 2 密碼加密演算法

2021-09-03 09:59:29 字數 1716 閱讀 7020

1、更新後的 php: 現代 php 中的密碼安全性

; 2、

3、yii 2預設用user表儲存賬號資訊,包括使用者的密碼,user表結構如下:

idusername

賬號auth_key

password_hash

儲存密碼的hash值

password_reset_token

忘記密碼,重置密碼用的token

email

status

created_at

updated_at

1.1.2.1

加密 php 5.5以後,提供了新的密碼加密函式password_hash(),這個加密函式有三個引數,第乙個引數就是待加密的密碼,第二個引數是加密演算法,推薦使用password_default,這樣可以隨著php的公升級,自動選用新的公升級演算法,第三個引數是加密演算法執行次數,一般來說次數越多,密碼強度越大,但是花費的時間越多。

1.1.2.2

校驗 使用password_hash()加密時,每呼叫一次就會使用新的solt,所以即使是同樣的密碼,每次呼叫password_hash()的結果都是不一樣的。

一般傳統的md5類方式加密密碼時,判斷輸入的密碼是否正確,就是重新用加密演算法把密碼再加密一次,然後判斷加密的結果與資料庫中儲存的是否一致。現在使用這樣的方式來校驗密碼自然是不行的了(注:ecshop和ectouch就是用這種方法存密碼的)。

php提供了password_verify()函式用來校驗密碼是否正確,這個函式有兩個引數,第乙個是使用者輸入的密碼,第二個引數是事先儲存的密碼hash值。既然每次呼叫password_hash()的返回值都不一樣,那password_verify()又是怎麼確認密碼是正確的呢?

根據php官網對於該函式的說明:

「注意 password_hash() 返回的雜湊包含了演算法、 cost 和鹽值。

因此,所有需要的資訊都包含內。使得驗證函式不需要儲存額外鹽值等資訊即可驗證雜湊。」

yii 2提供了乙個security類,將上面的密碼加密和驗證函式封裝起來,並且增加了對於低版本php的支援。

生成密碼的雜湊值,呼叫password_hash()實現。

校驗密碼是否正確,呼叫password_verify()實現。

在框架中使用security類,無需自己初始化,yii 2框架已經預設建立了security類的例項,使用如下**訪問即可:

yii::

->

security

->

validatepassword

($password

, $this

->

password_hash);

//或者

yii::

->

getsecurity

()->

hashdata

(serialize([

$cookie

->

name

, $value

]),

$validationkey)

public functioncorecomponents()

這裡的「timing attack」(時序***)引起了我的興趣,於是了解了一下,原來是有些破解演算法是根據目標系統的執行時間,來推測出加密演算法的一些資訊,從而降低破解難度,提高破解速度,真的是很有意思的一種破解思路。

如何通俗地解釋時序***(timingattack)?

Yii 2 記住密碼

yii 2的登入頁面提供了 記住密碼 這個功能最終是將相關資訊儲存在cookie中,從而實現自動登入的。看loginform的 校驗密碼的 是這樣的 public functionlogin else this getuser,是乙個model,由使用者自定義,當然,yii2也提供了預設的user ...

加密演算法 流密碼加密

流密碼是一種常見的加密演算法,基於異或 xor 操作,每次只操作乙個位元組,常見的流密碼加密演算法有 rc4 oryx seal。因為異或加密的本質,最常見的錯誤就是多次使用同乙個金鑰進行加解密。攻擊者甚至不需要知道金鑰就能成功破解密文。原理如下 缺陷 a b為明文,c為金鑰 e a a xor c...

密碼常用加密演算法

對稱性加密演算法 aes,des,3des des是一種分組資料加密技術 先將資料分成固定長度的小資料塊,之後進行加密 速度較快,適用於大量資料加密,而3des是一種基於des的加密演算法,使用3個不同密匙對同乙個分組資料塊進行3次加密,如此以使得密 度更高。相較於des和3des演算法而言,aes...