[Day 22] 建立註冊的畫面及功能(六) - 密碼加密

建立註冊的畫面及功能(六) - 密碼加密

我們做網頁的目的是要放在網路上,
這表示所有的人都可以看到網頁,
另一方面也表示有心人都可以來竊取資料,
所以這就牽扯到資訊安全的部分.

當然我們可以自己架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是加密過後的結果.
 

https://ithelp.ithome.com.tw/upload/images/20200930/20105694P1MoaP50Dt.png

 

實作發現,
即使是同樣的密碼跟Key,
每次跑出來的Hash密碼也會不一樣,
所以不能用字串Hash之後直接比對字串的方式比對密碼,
而必須用Laravel提供的方法來比對密碼.