You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Laravel默认Cookie加密方式修改为SHA-256或SHA-512?

Laravel Cookie加密/签名算法调整说明

首先明确核心概念:SHA-256、SHA-512属于哈希签名算法,并非对称加密算法,无法直接替代AES系列的加密逻辑。Laravel默认对Cookie的处理是「AES加密内容 + 基于SHA系列的签名校验」双流程,你可以调整签名阶段使用的哈希算法为SHA-256或SHA-512,操作步骤如下:

1. 确认基础配置

Laravel默认的Cookie签名已经使用SHA-256算法,如果你需要切换为SHA-512,需要自定义签名逻辑,首先保持原有加密配置不变(Cookie内容仍需对称加密实现可解密):
打开config/app.php确认加密算法配置:

'cipher' => 'AES-256-CBC', // 无需修改,保持原有对称加密逻辑

2. 重写Cookie加密中间件

默认的签名算法写在框架的EncryptCookies中间件中,你需要自定义中间件覆盖对应逻辑:

  • 运行命令生成自定义中间件:
    php artisan make:middleware CustomEncryptCookies
  • 编辑生成的中间件文件app/Http/Middleware/CustomEncryptCookies.php,内容如下:
<?php

namespace App\Http\Middleware;

use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
use Symfony\Component\HttpFoundation\Cookie;

class CustomEncryptCookies extends Middleware
{
    /**
     * 重写签名方法,替换哈希算法为SHA-512(需要SHA-256则把参数换成sha256即可)
     */
    protected function sign(Cookie $cookie)
    {
        $hash = hash_hmac('sha512', $cookie->getName() . $cookie->getValue(), $this->encrypter->getKey());
        return $cookie->withValue($cookie->getValue() . '|' . $hash);
    }

    /**
     * 重写校验方法,对应新的哈希算法
     */
    protected function isValid(string $value): bool
    {
        $parts = explode('|', $value);
        if (count($parts) !== 2) {
            return false;
        }

        $calculatedHash = hash_hmac('sha512', $parts[0], $this->encrypter->getKey());
        return hash_equals($calculatedHash, $parts[1]);
    }
}

3. 替换全局中间件注册

打开app/Http/Kernel.php,找到web中间件组,将原有的EncryptCookies中间件替换为你自定义的中间件:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\CustomEncryptCookies::class,
        // 剩余原有中间件无需改动
    ],
];

注意事项

  • 调整算法后,所有现有用户的Cookie都会立即失效,用户需要重新登录站点
  • 不要直接移除AES加密逻辑,否则Cookie内容会明文存储在客户端,存在敏感信息泄露风险
  • 如果你只需要修改特定Cookie的签名逻辑,可以将不需要加密的Cookie名称加入中间件的$except属性中单独处理

内容的提问来源于stack exchange,提问作者user16414117

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:36:03