美文网首页
Laravel 文档阅读:加密

Laravel 文档阅读:加密

作者: 晨曦入诗 | 来源:发表于2018-10-13 19:11 被阅读26次

简介


Laravel 加密使用 OpenSSL 来提供 AES-256 和 AES-128 加密,强烈建议你使用 Laravel 内置的加密工具,而不是用你的「本土化」加密算法。Laravel 中的所有加密值都使用了消息认证码(MAC)签名,因此能保证底层值经过加密后不能被修改。

配置


在使用 Laravel 加密之前,你必须要先配置 config/app.php 文件中的 key 选项。可以使用 php artisan key:generate 命令生成这个密匙,因为命令底层是使用了 PHP 的安全随机字节生成器来生成密匙的。如果这个密匙没有正确配置,Laravel 中的所有加密值都是不安全的。

使用加密器


加密一个值

可以使用辅助函数 encrypt 加密一个值。所有加密值都使用了 OpenSSL 的 AES-256-CBC 加密算法加密。此外,所有的加密值都使用了消息认证码(MAC)进行签名,以便检测对加密字符串的任何修改。

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UsersController extends Controllers
{
    /**
     * Store a secret message for the user.
     *
     * @param  Request  $request
     * @param  int  $id
     * @return Response
     */

     public function storeSecret(Request $request, $id)
     {
              $user = User::findOrFail($id);
              $user->fill([
                      'secret' => encrypt($request->secret)
              ])->save();
     }      
}

无序列化加密

encrypt 加密方法在加密过程中会对加密值序列化,所以我们可以为该方法传递对象和数组。但是,对于非 PHP 客户端来说是无法处理这个加密值的,对于这类客户端,我们需要取消对数据的序列化步骤。无序列化的加密和解密一个值,需要使用 Crypt 门面的 encryptStringdecryptString 方法:

use Illuminate\Support\Facades\Crypt;

$encrypted = Crypt::encryptString('Hello Word!');

$decrypted = Crypt::decryptString($encrypted);

解密一个值

使用 decrypt 方法来解密经 encrypt 方法加密的值。如果传递给 decrypt 方法的加密值无法正确解密,例如 MAC 无效时,将会抛出一个 Illuminate\Contracts\Encryption\DecryptionException 异常:

use Illuminate\Contracts\Encryption\DecryptionException;

try{
        $decrypted = decrypt ($encryptedValue);
} catch (DecryptionException){
      //无法解密
}

相关文章

网友评论

      本文标题:Laravel 文档阅读:加密

      本文链接:https://www.haomeiwen.com/subject/mrjnaftx.html