加密

设置

在使用 Laravel 的加密功能前,你需要先为 config/app.php 配置文件中的 key 参数设置一个值,这个值是一个包含 32 个随机字符的字符串。如果这个值没有正确设置,所有由 Laravel 加密的数据都是不安全的。

基本用法

加密

通过 Crypt facade 可以加密一段数据。所有加密采用的都是 OpenSSL 和 AES-256-CBC cipher。并且,所有加密过的数据都会被赋予一个“信息验证码”(MAC),以防被加密后所得到的字符串被篡改。

如下例,我们使用 encrypt 方法将加密过的数据存入 Eloquent model

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Crypt;
  4. use App\User;
  5. use Illuminate\Http\Request;
  6. use App\Http\Controllers\Controller;
  7. class UserController extends Controller
  8. {
  9. /**
  10. * Store a secret message for the user.
  11. *
  12. * @param Request $request
  13. * @param int $id
  14. * @return Response
  15. */
  16. public function storeSecret(Request $request, $id)
  17. {
  18. $user = User::findOrFail($id);
  19. $user->fill([
  20. 'secret' => Crypt::encrypt($request->secret)
  21. ])->save();
  22. }
  23. }

解密

当然,你可以使用 Crypt 中的 decrypt 方法进行解密。如果解密失败,例如 MAC 被篡改了,将会抛出 Illuminate\Contracts\Encryption\DecryptException 异常:

  1. use Illuminate\Contracts\Encryption\DecryptException;
  2. try {
  3. $decrypted = Crypt::decrypt($encryptedValue);
  4. } catch (DecryptException $e) {
  5. //
  6. }