Laravel 加密
加密是一种使用某些算法将明文转换为消息的过程,以便任何第三方用户无法读取信息。这对于传输敏感信息非常有帮助,因为入侵者很少有机会针对传输的信息进行攻击。
加密是通过一种称为 密码学 的过程来执行的。要加密的文本称为 明文 ,加密后获得的文本或消息称为 密文 。将密文转换为明文的过程称为 解密 。
Laravel使用 AES-256 和 AES-128 加密器,使用Open SSL进行加密。 Laravel中包含的所有值都使用协议 消息认证码 进行签名,以便一旦加密,底层值就无法被篡改。
配置
在Laravel中生成密钥的命令如下所示 −
php artisan key:generate
请注意,该命令使用PHP安全随机字节生成器,您可以在下面给出的屏幕截图中看到输出结果 –
上述命令用于生成可用于 Web 应用的密钥。请查看下面显示的屏幕截图。
注意
加密的值在 config/app.php 文件中正确对齐,该文件包含两个加密参数,分别为 key 和 cipher 。如果使用该密钥加密的值未正确对齐,所有使用 Laravel 加密的值都将不安全。
加密过程
可以通过 Laravel 类的控制器使用 encrypt helper 来对值进行加密。这些值使用 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 intid
* @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而无法成功,则会抛出适当的异常。