# 加密
### 使用情境
我們若需要在資料庫儲存一些敏感資料(像是信用卡的資料),但我們又為了避免資料庫遭到入侵,而導致所有使用者相關的敏感資料全都被竊取,我們可以使用 Laravel 提供的「加密與解密」演算法,將我們的敏感資料加密儲存到資料庫,待我們讀取資料的時候,再將其資料解密出來處理。
### 設定
在 Laravel 做「加密與解密」演算法時,會使用 `config/app.php` 中的 key 值去當作加解密的 salt,自己的應用需要設定自己的 key 值,若沒有設定的話被加密過的值還是有可能被暴力破解出來,所以要記得去設定,而這個 key 值若變更了,雜湊的驗證也不會相同喔~
### 使用
~~~
// 加密
$original_data = '需要加密的資料';
$encrypt_data = Crypt::encrypt($original_data);
// 解密
$decrypted = Crypt::decrypt($encrypt_data);
~~~
### 備註
重複加密相同的資料得到的密文不會一樣,所以不要使用像 md5 的方式去比對密文資料是否相同
### 使用 md5 比較密文
~~~
$original_data = '需要加密的資料';
// 第 1 次使用 md5 加密的資料
$first_md5_hash_data = md5($original_data);
// 第 2 次使用 md5 加密的資料
$second_md5_hash_data = md5($original_data);
// 資料相同
// true
var_dump($first_md5_hash_data === $second_md5_hash_data);
~~~
### 使用加密演算法比較密文
~~~
$original_data = '需要加密的資料';
// 第 1 次使用加密演算法加密的資料
$first_encrypt_data = Crypt::encrypt($original_data);
// 第 2 次使用加密演算法加密的資料
$second_encrypt_data = Crypt::encrypt($original_data);
// 資料不相同
// false
var_dump($first_encrypt_data === $second_encrypt_data);
~~~
### 參考資料
- [加密 - Laravel.tw](http://laravel.tw/docs/5.1/encryption)
- 介紹
- 環境
- .env 檔案
- 資料庫
- Migration (遷移)
- Eloquent Model (模型)
- 設定
- 關聯
- 魔術函式
- 使用 Eloquent
- 常見問題
- 無法取得查詢 Log
- 使用大量資料的方式新增時無法新增
- 使用中繼模型繼承 Eloquent 模型造成無法使用大量資料新增
- PostgreSQL
- 安裝 PostgreSQL ODBC driver
- HTTP
- 請求
- 中介層 (Middleware)
- 視圖 (View)
- 服務
- 認證登入(Auth)
- 郵件(Mail)
- 使用 Gmail 寄信
- 使用 Mailgun 寄信
- 隊列(Queue)
- database
- 非同步(async)
- 輔助方法 (Helpers)
- 自定義輔助方法
- 單元測試 (Unit Test)
- Post CSRF 錯誤
- 錯誤與日誌
- 在單元測試顯示例外
- 日誌記錄層級
- 日誌巨集
- 加密
- 雜湊
- Elixir
- 使用 Elixir 合併 CSS 與 JS
- 設計模式
- 服務容器
- PSR
- Model 模型
- 學習資源
- 套件
- Debug
- Artisan tail
- 工具
- Carbon
- 設計模式
- 其他常見問題
- Call to undefined method getCachedCompilePath()
- 變更專案目錄名稱導致 View 無法讀取
- Laravel 5.1 目錄結構異動
- 學習資源
- 官方
- 社群
- 會議議程
- 工作
- 文件
- 文章
- 套件
- 服務工具
- 教學影片
- 教學網站
- 編輯開發
- 主機
- 成功案例