- Laravel 教程
- Laravel - 首页
- Laravel - 概述
- Laravel - 安装
- Laravel - 应用结构
- Laravel - 配置
- Laravel - 路由
- Laravel - 中间件
- Laravel - 命名空间
- Laravel - 控制器
- Laravel - 请求
- Laravel - Cookie
- Laravel - 响应
- Laravel - 视图
- Laravel - Blade 模板
- Laravel - 重定向
- Laravel - 数据库操作
- Laravel - 错误与日志
- Laravel - 表单
- Laravel - 本地化
- Laravel - Session
- Laravel - 验证
- Laravel - 文件上传
- Laravel - 发送邮件
- Laravel - Ajax
- Laravel - 错误处理
- Laravel - 事件处理
- Laravel - Facades
- Laravel - Contracts
- Laravel - CSRF 保护
- Laravel - 身份验证
- Laravel - 授权
- Laravel - Artisan 命令行
- Laravel - 加密
- Laravel - 哈希
- 理解发布流程
- Laravel - 游客用户权限
- Laravel - Artisan 命令
- Laravel - 分页自定义
- Laravel - Dump Server
- Laravel - Action URL
- Laravel 有用资源
- Laravel - 快速指南
- Laravel - 有用资源
- Laravel - 讨论
Laravel - 加密
加密是使用某些算法将纯文本转换为消息的过程,以便任何第三方用户都无法读取信息。这对于传输敏感信息非常有用,因为入侵者攻击传输信息的可能性较小。
加密是通过称为密码学的过程执行的。要加密的文本称为明文,加密后获得的文本或消息称为密文。将密文转换为明文的过程称为解密。
Laravel 使用AES-256 和 AES-128 加密器,它使用 OpenSSL 进行加密。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; // Exception for decryption thrown in facade try { $decrypted = decrypt($encryptedValue); } catch (DecryptException $e) { // }
请注意,如果由于使用了无效的 MAC 而解密过程不成功,则会抛出相应的异常。
广告