簡體   English   中英

PHP mcrypt_decrypt隨機失敗

[英]PHP mcrypt_decrypt randomly failing

我在努力使用PHP的mcrypt函數。 我以前從未使用過它們,它們在我的測試服務器(WAMP PHP 5.4.3)上運行良好,但是在生產服務器(LAMP PHP 5.2.17)上隨機出現故障。 當我運行解密函數時,我得到的是隨機(二進制?)字符,如下所示:n / =C_ +` n{'a 6 Xh fEe41Omk7DjQ6/ n6leoTg ==。

以下是加密和解密功能。 這些來自我一直在使用的隨機數類

我嘗試過的事情:

  • 從兩個函數中刪除IV參數
  • 在加密函數中創建IV,存儲在類屬性中,然后在解密函數中使用該屬性
  • 如此處所述,將 IV存儲在加密的輸出

我還有什么要嘗試的嗎?

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
    )
  )
);
}

經過幾個小時將我的頭撞在牆上的那一刻之后,我意識到問題與mcrypt無關。 我只需要對加密的字符串進行urlencode ,然后再將其輸出到查詢字符串中即可。

當我稍后嘗試對加密字符串$_REQUEST進行解密時,這導致丟失了一部分加密字符串。 這解釋了為什么失敗是隨機的,因為失敗取決於加密字符串中纏繞的“特殊”字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM