"MAC 无效"和"有效负载无效"有什么区别?

  • 本文关键字:无效 区别 负载 MAC 有效 laravel
  • 更新时间 :
  • 英文 :


我运行两个 laravel 5.7 应用程序,它们都有不同的应用程序密钥。

 -->app 1 key 1,
 -->app 2 key 2

[这一点不太明显] 这是两个应用程序(基于用户角色的不同模块,使用不同的应用程序密钥,但访问相同的数据库(。

使用密钥 1 加密应用 1 中的某些数据时,现在使用密钥 1 解密应用 1 中的加密数据,正常工作。

但是我更改了加密的数据字符串(应用程序 1,密钥 1(并尝试使用密钥 1 在应用程序 1 中再次解密,它给出错误"有效负载无效"。我消化这个。

现在,第二件事是,我使用密钥 1 加密应用程序 1 中的数据,并使用密钥 2 在应用程序 2 中传递此加密数据字符串以进行解密,它给出了另一个错误"MAC 无效"。

现在我的问题是为什么 laravel 给出两个不同的错误?为什么它不会给出相同的错误,因为我们用另一个应用程序发送另一个数据(这意味着这对第二个应用程序来说是错误的(。

你能区分一下吗?可能是导致任何安全循环整体的原因。

谢谢。

Laravel使用base64对游戏负载进行编码和解码。这里来看看:

/**
 * Get the JSON array from the given payload.
 *
 * @param  string  $payload
 * @return array
 *
 * @throws IlluminateContractsEncryptionDecryptException
 */
protected function getJsonPayload($payload)
{
    $payload = json_decode(base64_decode($payload), true);
    // If the payload is not valid JSON or does not have the proper keys set we will
    // assume it is invalid and bail out of the routine since we will not be able
    // to decrypt the given value. We'll also check the MAC for this encryption.
    if (! $this->validPayload($payload)) {
        throw new DecryptException('The payload is invalid.');
    }
    if (! $this->validMac($payload)) {
        throw new DecryptException('The MAC is invalid.');
    }
    return $payload;
}

/**
 * Verify that the encryption payload is valid.
 *
 * @param  mixed  $payload
 * @return bool
 */
protected function validPayload($payload)
{
    return is_array($payload) && isset($payload['iv'], $payload['value'], $payload['mac']) &&
           strlen(base64_decode($payload['iv'], true)) === openssl_cipher_iv_length($this->cipher);
}

/**
 * Determine if the MAC for the given payload is valid.
 *
 * @param  array  $payload
 * @return bool
 */
protected function validMac(array $payload)
{
    $calculated = $this->calculateMac($payload, $bytes = random_bytes(16));
    return hash_equals(
        hash_hmac('sha256', $payload['mac'], $bytes, true), $calculated
    );
}

照明/加密/加密.php

如您所见,有一个双重检查,如果您手动修改有效负载,它不一定具有正确的结构,并且会返回The payload is invalid

然后,当有效负载有效时,它将尝试使用 MAC。当内容不匹配时,它将返回The MAC is invalid.

相关内容

  • 没有找到相关文章

最新更新