Laravel 加密


加密是一个使用一些算法将纯文本转换为信息的过程,使任何第三方用户无法读取信息。这对传输敏感信息很有帮助,因为入侵者瞄准所传输信息的机会较少。

加密是通过一个称为Cryptography的过程进行的。要加密的文本被称为明文,加密后得到的文本或信息被称为密文,将密码文本转换为普通文本的过程被称为解密

Laravel使用AES-256AES-128加密算法,它使用Open SSL进行加密,所有包含在Laravel中的数值都是使用协议中的消息验证码来签署的,这样一旦加密后,底层的数值就无法被篡改.

配置


在Laravel中用于生成密钥的命令如下所示:

php artisan key:generate

请注意,此命令使用 PHP 安全随机字节生成器,如下图所示:

Artisan Key

上面给出的命令用于生成可在 Web 应用程序中使用的密钥。

注意:加密的值在config/app.php文件中正确对齐,其中包括两个加密的参数即keycipher。如果使用这个密钥的值没有正确对齐,所有在Laravel中加密的值将是不安全的。

加密过程


加密可以通过使用Laravel的 encrypt helper 来完成,这些值是使用OpenSSL和AES-256密码进行加密的。所有的加密值都有信息验证码(MAC)的签名,以检查加密字符串的任何修改。

defaultCommand

下面显示的代码在控制器中用于保存秘密或敏感消息。

<?php

namespace App\Http\Controllers;

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

class DemoController extends Controller{
    **
        * 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();
    }
}

解密过程


解密是通过 decrypt helper,观察以下几行代码:

use Illuminate\Contracts\Encryption\DecryptException;

// 在 Facade 中抛出的解密异常
try {
    $decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
    //
}

请注意,如果由于使用了无效的 MAC 导致解密过程不成功,则会抛出相应的异常。