1. ホーム
  2. php

[解決済み] PHP: json_decode が動作しない。

2022-02-05 21:56:46

質問

これは ではない が動作します。

$jsonDecode = json_decode($jsonData, TRUE);

しかし $jsonData を手動でデコード関数内に置くと、動作します。

これは 動作 :

$jsonDecode = json_decode('{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}', TRUE);

を出力しました。 $jsonData をコピーして、上記のようにデコード関数に入れました。すると、うまくいきました。しかし、もし私が $jsonData を直接デコード関数に入れると、うまくいきません。

var_dump($jsonData) を表示します。

string(144) "{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}"

$jsonData は、暗号化された $_GET 変数を使用します。それを暗号化するために私はこうしています。

$key = "SOME KEY";

$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_ECB, $iv);

$iv = rawurlencode(base64_encode($iv));
$enc = rawurlencode(base64_encode($enc));

//To Decrypt
$iv = base64_decode(rawurldecode($_GET['i']));
$enc = base64_decode(rawurldecode($_GET['e']));

$data = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB, $iv);

解決方法は?

おそらく、復号化されたデータからパディングを取り除く必要があるのでしょう。文字列の中には124の文字が含まれていますが var_dump は144と報告しています。つまり、20文字のパディングを除去する必要があります(文字列の末尾にある一連の" \0" バイト)。

おそらく、ブロック末尾の4バイトと空の16バイトのブロック(データの終わりを示すため)です。

現在、文字列の復号化/暗号化をどのように行っていますか?

編集 :

文字列の末尾の0バイトをトリミングするために追加する必要があります。

$jsonData = rtrim($jsonData, "\0");