1

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

1 に答える 1

1

これの壁に頭をぶつけて数時間後、私は問題がmcryptとは何の関係もないことに気づきました。urlencodeクエリ文字列で出力する前に、暗号化された文字列が必要でした。

これにより、$_REQUEST後で暗号化された文字列を復号化しようとしたときに、暗号化された文字列の一部が失われていました。これは、暗号化された文字列に含まれる「特殊」文字に依存するため、失敗がランダムであった理由を説明しています。

于 2013-03-25T01:52:45.703 に答える