【问题标题】:PHP mcrypt_decrypt randomly failingPHP mcrypt_decrypt 随机失败
【发布时间】:2013-03-25 09:52:45
【问题描述】:

我正在努力使用 PHP 的 mcrypt 函数。我以前从未使用过它们,它们在我的测试服务器(WAMP PHP 5.4.3)上运行良好,但它们在生产服务器(LAMP PHP 5.2.17)上随机失败。当我运行解密函数时,我得到如下随机(二进制?)字符:n��/�=�C_����+`�n{'a��6�Xh��fEe41Omk7DjQ6/n6leoTg==.

以下是加密和解密函数。这些来自我一直在使用的nonce class

我尝试过的事情:

  • 从两个函数中删除 IV 参数
  • 在加密函数中创建一个 IV,存储在类属性中,然后在解密函数中使用该属性
  • 在加密输出中将 IV 存储为 described here

还有什么我应该尝试的吗?

private function fnEncrypt($sValue)
{
return trim(
  base64_encode(
    mcrypt_encrypt(
      MCRYPT_RIJNDAEL_256,
      hash($this->hash, $this->secret, true), $sValue,
      MCRYPT_MODE_ECB,
      mcrypt_create_iv(
        mcrypt_get_iv_size(
          MCRYPT_RIJNDAEL_256,
          MCRYPT_MODE_ECB
        ),
        MCRYPT_RAND
      )
    )
  )
);
}

private function fnDecrypt($sValue)
{
return trim(
  mcrypt_decrypt(
    MCRYPT_RIJNDAEL_256,
    hash($this->hash, $this->secret, true),
    base64_decode($sValue),
    MCRYPT_MODE_ECB,
    mcrypt_create_iv(
      mcrypt_get_iv_size(
        MCRYPT_RIJNDAEL_256,
        MCRYPT_MODE_ECB
      ),
    MCRYPT_RAND
    )
  )
);
}

【问题讨论】:

    标签: php encryption mcrypt


    【解决方案1】:

    在这个问题上我用头撞墙几个小时后,我意识到这个问题与 mcrypt 没有任何关系。在将加密字符串输出到查询字符串之前,我只需要urlencode

    当我稍后尝试$_REQUEST 加密字符串进行解密时,这导致部分加密字符串丢失。这就解释了为什么失败是随机的,因为它取决于加密字符串中的“特殊”字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 2017-02-07
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多