Laravel加密


加密是一个使用一些算法将纯文本转换为消息的过程,以便任何第三个用户无法读取信息。这对传输敏感信息很有帮助,因为入侵者以传输信息为目标的可能性较小。

加密是使用称为 密码学 的过程执行的。要被加密的被称为文本 纯文本 和文本或加密之后获得的消息被称为 密文 。将密文转换为纯文本的过程称为 解密

Laravel使用 AES-256AES-128 加密器,它使用Open SSL进行加密。包含在Laravel中的所有值都使用协议 消息认证代码 进行签名,以便在加密后,底层值不会被篡改。

组态

下面显示了用于在Laravel中生成 密钥 的命令-

php artisan key:generate

请注意,该命令使用PHP安全随机字节的生成器,您可以看到如下面屏幕截图所示的输出 -

工匠的钥匙

上面给出的命令有助于生成可用于Web应用程序的密钥。观察下面显示的屏幕截图 -

注意

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

加密过程

可以通过在Laravel类的控制器中使用 加密助手 来完成值的 加密 。这些值使用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();
   }
}

解密过程

值的 解密 是用 解密助手 完成的。遵守以下几行代码 -

use Illuminate\Contracts\Encryption\DecryptException;

// Exception for decryption thrown in facade
try {
   $decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
   //
}

请注意,如果由于使用无效的MAC而导致解密过程不成功,则会引发适当的异常。