Laravel - 加密
加密是使用某些算法将纯文本转换为消息的过程,以使任何第三用户都无法读取该信息。 这有助于传输敏感信息,因为入侵者瞄准传输的信息的机会较少。
加密是使用称为密码术的过程执行的。 要加密的文本称为纯文本,加密后获得的文本或消息称为密文。 将密文转换为纯文本的过程称为解密。
Laravel 使用AES-256和AES-128加密器,它们使用 Open SSL 进行加密。 Laravel 中包含的所有值均使用协议 消息认证码 进行签名,因此加密后底层值就无法被篡改。
配置
用于在 Laravel 中生成 密钥 的命令如下所示 −
php artisan key:generate
请注意,此命令使用 PHP 安全随机字节生成器,您可以看到如下屏幕截图所示的输出 −
上面给出的命令有助于生成可用于 Web 应用程序的密钥。观察下面的屏幕截图 −
注意
用于加密的值在 config/app.php 文件中正确对齐,其中包含两个用于加密的参数,即 key 和 cipher。如果使用此密钥的值未正确对齐,则 Laravel 中加密的所有值都将不安全。
加密过程
可以使用 Laravel 类的控制器中的 encrypt 帮助程序 来加密值。这些值使用 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 帮助程序 解密值。观察以下代码行 −
use Illuminate\Contracts\Encryption\DecryptException; // Facade 中引发解密异常 try { $decrypted = decrypt($encryptedValue); } catch (DecryptException $e) { // }
请注意,如果由于使用了无效 MAC 导致解密过程不成功,则会引发相应的异常。