雜湊(Hashing)

使用情境

使用者輸入的密碼,通常我們將其加密再存到資料庫中,但這類的資料我們通常不需要反解回來處理,所以我們不需要使用加密的演算法去加密資料

因為加密演算法需要完整的解回原先的資料,所以若資料越長密文也會越長,但雜湊不需要解回原先的資料,只需要驗證原先的資料,經過再雜湊的檢查是相同的就好(輸入的密碼雜湊驗證與原先存在資料庫的雜湊資料相同),所以雜湊的資料可以有固定的長度,像是 md5 的雜湊資料長度固定為 32,而 Laravel 提供的 Hash 雜湊演算法,資料長度固定為 60。

設定

在 Laravel 做「雜湊」演算法時,會使用 config/app.php 中的 key 值去當作雜湊的 salt,自己的應用需要設定自己的 key 值,若沒有設定的話被加密過的值還是有可能被暴力破解出來,所以要記得去設定,而這個 key 值若變更了,雜湊的驗證也不會相同喔~

使用

雜湊

// 雜湊
$original_password = '密碼明碼';
$hash_password = Hash::make($original_password);

驗證

// 雜湊
$original_password = '密碼明碼';
$hash_password = Hash::make($original_password);
// 驗證
$check_result = Hash::check($original_password, $hash_password);
// true
var_dump($check_result);

備註

重複雜湊相同的資料得到的密文不會一樣,所以不要使用像 md5 的方式去比對密文資料是否相同

使用 md5 比較密文

$original_password = '密碼明碼';
// 第 1 次使用 md5 加密的資料
$first_md5_hash_password = md5($original_password);
// 第 2 次使用 md5 加密的資料
$second_md5_hash_password = md5($original_password);
// 資料相同
// true
var_dump($first_md5_encrypt_password === $second_md5_encrypt_password);

雖然每次雜湊的結果都不一樣,但你可以放心的將任何一次雜湊的資料存放到資料庫中,因為雖然密文不同,但 Laravel 的雜湊演算法,還是可以比對出來是不是由相同的資料去做雜湊的

使用雜湊演算法比較資料是否相同

$original_password = '密碼明碼';
// 第 1 次使用雜湊演算法雜湊的資料
$first_hash_password = Hash::make($original_password);
// 第 2 次使用雜湊演算法雜湊的資料
$second_hash_password = Hash::make($original_password);
// 資料不相同
// false
var_dump($first_encrypt_password === $second_encrypt_password);

// 驗證雜湊資料 true
$first_check_result = Hash::check($original_password, $first_hash_password);
$second_check_result = Hash::check($original_password, $second_hash_password);

參考資料

KeJyun 最新新書推薦
- Laravel 5 for beginner 新手道場:優雅運用框架快速開發 PHP 網站
- Laravel框架开发详解:从零基础到运用框架快速开发PHP网站

Laravel 是 PHP 的框架(Framework),提供了很多開發網站或 API 所需的工具及環境,經過簡單的設定就可以完成資料的處理及顯示,使開發者可以很優雅且快速的開發出各個不同的產品。本書適合有 PHP 基礎的人,但不知道要怎麼選擇框架,或者不用框架的人也能夠明白它的好處。

雖然 WordPress 也能夠架站,但如果有客製化需求,要開發各式各樣的網站,或提供 App 使用的 API,如此一來你只能選擇用框架,而 Laravel 是目前最受歡迎的。

本書將解說為什麼要使用框架,以及理解框架的優缺點後,要怎麼選擇框架,並用框架快速建構一個網站。除非必要,否則書中會避免專業技術用語,盡量使用最生活化易懂的例子及語氣,讓大家更容易進入 Laravel 的世界。

Laravel 5 for beginner 新手道場:優雅運用框架快速開發 PHP 網站

購書連結

Laravel框架开发详解:从零基础到运用框架快速开发PHP网站

購書連結

comments powered by Disqus