PHP-шифрование и проблема с URL, помогите? - PullRequest
0 голосов
/ 12 сентября 2011

Я сделал методы шифрования / дешифрования, основанные на этой модели

// encrypt:
base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key),
$string, MCRYPT_MODE_CBC, md5(md5($key))))

//decrypt:
rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key),
base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

внутри одной страницы все работает, так что

decrypt(encrypt ('hello',$key))

хорошо работает, но когда я отправляю ссылку:

echo "http://link.here?data=".urlencode(encrypt(('hello',$key)));

на другой странице получения I:

decrypt(urldecode($_GET['data']),$key));

У меня беспорядок.

Я замечаю, что с расшифрованным сообщением происходит ОЧЕНЬ странно.

Я зашифровал '72', затем прочитал его и расшифровал. Я заметил что-то очень странное, когда я проверял это с is_numeric() ... Это не отвечало ни на истину, ни на ложь !! что-то странное происходило .... Итак, я проверил с strlen, и результат был ... 4! Я подумал, что что-то случилось с байтами, но я понятия не имею, что это может быть. Я пытаюсь передать номер через тело электронной почты, и я пытаюсь заставить его работать, любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 сентября 2011

Попробуйте извлечь urldecode из кода на принимающей странице.

Если у вас где-то не используется двойное кодирование (и нет никаких признаков того, что вы опубликовали), вам не нужно (или не нужно) urldecode строки из $_GET. PHP делает это для вас.

Для «только текстовых» данных urldecoding слишком много раз может оказаться безвредным. Однако в вашем конкретном случае, когда основным текстом является Base64, весьма вероятно, что он будет вредным, поскольку urldecode преобразует знаки + (которые являются одним из символов, используемых в Base64) в пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...