很多網站你忘記密碼他叫你重整密碼,那為什麼他不直接記密碼給你,因為他也不知道你密碼是什麼
延伸閱讀:
密碼學
1.編碼(Encoding): 沒有安全性可言,就只是換個方式來表達資料
2.加密(Encrypt) :
對稱加密 VS 非對稱加密
對稱加密 : AES(Advanced Encryption Standard),加密解密都是用同一個 key
以凱薩加密法來說,他加密的方式就是把每個英文字母加上一個偏移量 a -> t 之類的
所以只要知道 key 的人就可以 t -> a
非對稱加密 : RSA ,由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)在1977年一起提出的。當時他們三人都在麻省理工學院工作。RSA 就是他們三人姓氏開頭字母拼在一起組成的。
3.雜湊(Hashing) :
把各個 欄位/字元 丟進去某個公式計算的方式就叫做雜湊(Hash)
特性
- 不可逆
- 輸入同樣的值,一定會得到同樣的值
- 不一樣的長度輸入,可以得到固定長度的 hash 碼
- 不同輸入可能得到相同的 hash 碼(但機率極低)
- 輸入只差一點點,但輸出可能天差地遠
因此駭客即使知道了hash 碼,也難以輕易解碼。如果是本人要登入的話,主機只要對輸入的密碼做雜湊,去比對是不是符合儲存的雜湊值就可以了。
Hash (雜湊)演算法
SHA-0
SHA-1 ( 已經被證明不夠安全。 2017年荷蘭密碼學研究小組 CWI 和Google 正式宣布攻破了SHA-1)
SHA-256
MD-5 (已經被證明不夠安全。 1996年後被證實存在弱點,可以被加以破解 ;2004年,證實 MD5 演算法無法防止碰撞)
RIPEMD-160
使用內建 hash 函式
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
密碼就會轉成看不懂的 hash 碼
而在登入頁面只要驗證密碼是否和 hash 碼是否匹配,用 password_verify 會回傳 true 或 false
password_verify ( string $password , string $hash ) : bool
verify 證明、證實、校驗