1

ページの URL の一部として渡すトークンを作成しています。rawurlencode ()を使用して文字列をエンコードし、トークンとして送信しますが、受信したトークン (URL パラメーターとして渡される) をデコードすると、わずかに異なる文字列が得られることがわかります。

私の URL は次のようになります: /path/to/file.html?token=abcd123

ここに私が使用しているコードのスニペットがあります。私は明らかに長いことをしていますか? それができない場合、(暗号化された) トークンを作成して URL に渡すより良い方法はありますか?

<?php
//send

$raw = "some secret string";
$token = rawurlencode($raw);


//recieve
$data = rawurldecode($token);

?>

[編集]

enc(dec)ryption 機能を削除しました - それらは問題の原因ではありませんでした - そしてニシンでした。私は問題を特に rawurlencode/decode が動作する方法で対称的ではないことに絞り込みました。

rawurlencoded 文字列をデコードすると、別の文字列が返されます (同様の文字列ですが、一部が欠落しています)。確かに、URL の基本的な部分にバグがあるはずがないので、何か間違ったことをしているに違いありません。問題は、私がそれを見つけられないことです。これまでのところ、他の誰もそれを見つけることができないようです...

[追加情報]

私は Symfony Web フレームワーク (v1.3.8) を使用していますが、これはおそらく裏でエンコードとデコードを行ってリクエストを処理しています。$_POST 変数からトークン パラメータを直接取得して、Symfony がすべての原因であるかどうかを確認します。

4

1 に答える 1

0

rawurldecodePHPがトークンを処理するため、URLからトークンを受け取るときにトークンを取得する必要はありません。たとえば、「foo.php?q = hello%20world」では、$_GET['q']「hello%20world」ではなく「helloworld」になります。

ECBモードを使用しているため、IVは無視されます。これは、暗号化と復号化に同じIVを使用する必要があるため幸いです。

何が失敗する可能性があるかについては、復号化された文字列がブロックサイズに埋め込まれるため、元の文字列よりも長くなる可能性があります。これを回避するには、文字列の長さを渡し、substr復号化後に使用します。

于 2011-02-24T03:05:15.723 に答える