iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0

今天要來講的是 Hash,與前面的加密不同,以上是我了解後整理出 Hash 的特點。

  1. Hash 是不可逆的。
  2. Hash 演算法運算完的輸出是固定長度
  3. 相同的內容經 Hash 演算法,得到的輸出必定一樣。
  4. 不同的內容經 Hash 演算法,得到相同輸出的機率非常低。
    上述說非常低,表示有可能會有兩個不同的輸入,得到相同的輸出,這個稱之為雜湊碰撞。

而laravel官方使用 Bcrypt 和 Argon2 散列來存密碼,預設是 Bcrypt。

Bcrypt 在Hash中是很好的選擇,因為他有 Level 可以調整,在你的 Level 愈高,生成Hash時間就愈長,這個時間長度愈長是好的,這樣在黑客在生成彩虹表的時間就愈長,能更有效防止攻擊。

因此我們可以來看看這個時間的差異

$start_time = date("H")*3600+date("i")*60+date("s");

        $hashed = Hash::make('password', [
            'rounds' => 18,
        ]);

        $end_time = date("H")*3600+date("i")*60+date("s"); 
        $time_total = $end_time - $start_time;
        echo "執行了:".$time_total."秒";

算一下他的時間,愈下面的時間 rounds 愈大,最下面的 rounds 為18,需要花13秒的時間計算

好,那我們來回顧一下之前我們如何儲存密碼到資料庫中的

User::create([
            'account' => $account,
            'password' => Hash::make($password),
            'name' => Crypt::encryptString($username),
        ]);

一樣是使用 Hash::make 來散列密碼,而如何確認輸入的密碼與資料庫相同呢,是利用

Hash::check($password, $user->password)

這樣就能知道是否一致,若一致則回傳 true,好,今天的Hash就研究到這邊。


上一篇
Day21 跟著官方文件學習Laravel-Encryption
下一篇
Day23 跟著官方文件學習Laravel-Collection
系列文
跟著官方文件學習Laravel, 並實作出一個會員登入系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言