Laravel - 加密

  • 简述

    加密是使用某些算法将纯文本转换为消息的过程,使得任何第三方用户都无法读取该信息。这对于传输敏感信息很有帮助,因为入侵者瞄准所传输的信息的机会较小。
    加密是使用称为的过程执行的Cryptography。要加密的文本称为Plain Text而加密后得到的文本或消息称为Cipher Text。将密文转换为明文的过程称为Decryption.
    Laravel 使用AES-256AES-128加密器,使用 Open SSL 进行加密。Laravel 中包含的所有值均使用协议进行签名Message Authentication Code使得基础值一旦加密就无法被篡改。
  • 配置

    用于生成的命令key在 Laravel 中如下所示 -
    
    php artisan key:generate
    
    请注意,此命令使用 PHP 安全随机字节生成器,您可以看到输出,如下面的屏幕截图所示 -
    工匠钥匙
    上面给出的命令有助于生成可在 Web 应用程序中使用的密钥。观察下面显示的屏幕截图 -

    笔记

    加密值在中正确对齐config/app.php文件,其中包含两个加密参数,即keycipher。如果使用此密钥的值未正确对齐,则 Laravel 中加密的所有值都将不安全。
  • 加密过程

    值的加密可以通过使用encrypt helper在 Laravel 类的控制器中。这些值使用 OpenSSL 和 AES-256 密码进行加密。所有加密值均使用消息身份验证代码 (MAC) 进行签名,以检查加密字符串是否有任何修改。
    默认命令
    下面显示的代码在控制器中提到,用于存储秘密或敏感消息。
    
    <?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;
    // Exception for decryption thrown in facade
    try {
       $decrypted = decrypt($encryptedValue);
    } catch (DecryptException $e) {
       //
    }
    
    请注意,如果由于使用无效 MAC 导致解密过程不成功,则会引发相应的异常。