建立註冊的畫面及功能(六) - 密碼加密
我們做網頁的目的是要放在網路上,
這表示所有的人都可以看到網頁,
另一方面也表示有心人都可以來竊取資料,
所以這就牽扯到資訊安全的部分.
當然我們可以自己架Server,
但是要做到安全的資安,
那需要技術,
也需要一些錢,
另外我們也可以租一台Server,
然後就相信對方的資安可以做得很好,
但是那也需要錢.
從另外一個角度來說,
我們無法保證對方絕對拿不到資料,
那我們可以換個角度來思考,
我們要想辦法讓對方即使拿到資料也沒有用,
這就進入到我們今天的主題-加密.
一般說的加密大約可以分為兩種,
一種是能夠解密的加密,
一種是雜湊,
理論上是無法解密的,
如果有看過以前的戰爭片或是一些跟資訊安全相關的電影,
尤其是以前的電報,
資料常常是傳來傳去的,
一定會被對方攔截到的,
所以就會需要做加密的動作,
然後另外一方就會需要想辦法破解,
而且加密的方式有可能是每天都在改變的,
必須在一天內破解對方的加密方式,
才能取得足夠的情報,
情報往往是戰爭當中勝負的關鍵.
好像離題了,
所以我們現在要談的是Laravel提供的加密方式,
尤其是個資以及密碼,
幾乎是一定要加密的,
個資由於需要解密,
所以不能用雜湊的方式,
而密碼常常會用雜湊的方式加密,
能夠比對輸入的正不正確,
但是無法取得原來的密碼,
所以這種方式在忘記密碼的時候,
通常是直接產生另外一組密碼,
傳給使用者使用,
再讓使用者去修改密碼.
修改之前的App/Http/Controllers/UserAuthController.php裡面的signUpProcess
//處理註冊資料
public function signUpProcess()
{
//接收輸入資料
$input = request()->all();
//驗證規則
$rules = [
//暱稱
'name' => [
'required',
'max:50',
],
//帳號(E-mail)
'account' => [
'required',
'max:50',
'email',
],
//密碼
'password' => [
'required',
'min:5',
],
//密碼驗證
'password_confirm' => [
'required',
'same:password',
'min:5'
],
];
//驗證資料
$validator = Validator::make($input, $rules);
if($validator->fails())
{
//資料驗證錯誤
return redirect('/user/auth/sign-up')
->withErrors($validator)
->withInput();
}
$input['password'] = Hash::make($input['password']);
var_dump($input);
exit;
}
當然我們也要引用Hash方法
use Hash;
可以看到我們用Hash::make來幫密碼加密,
然後印出結果出來.
password_confirm是原來輸入的密碼,
password是加密過後的結果.
實作發現,
即使是同樣的密碼跟Key,
每次跑出來的Hash密碼也會不一樣,
所以不能用字串Hash之後直接比對字串的方式比對密碼,
而必須用Laravel提供的方法來比對密碼.