1、更新後的 php: 現代 php 中的密碼安全性
; 2、
3、yii 2預設用user表儲存賬號資訊,包括使用者的密碼,user表結構如下:
idusername
賬號auth_key
password_hash
儲存密碼的hash值
password_reset_token
忘記密碼,重置密碼用的token
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...