Laravel 文档阅读:加密

简介


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)进行签名,以便检测对加密字符串的任何修改。

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 文档阅读:加密)