У меня есть PHP script, который выполняет базовое шифрование строки с помощью метода ниже:
<?php
$key = 'secretkey';
$string = $_GET['str'];
if ($_GET['method'] == "decrypt")
{
$output = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}
if ($_GET['method'] == "encrypt")
{
$output= base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}
echo $output;
?>
Пример URL-адреса для шифрования строки будет выглядеть так:
Encrypt.php? method = encrypt & str = быстрая лиса
Что бы вернуть это как зашифрованную строку:
LCuT/ieVa6cl3/4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
Теперь для дешифрования строки все, что вам нужно сделать, это изменить запрос метода на "расшифровать", например:
Encrypt.php метод = дешифровать &? Ул = LCuT/ieVa6cl3/4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
Единственная проблема заключается в том, что когда эта зашифрованная строка расшифровывается, она возвращает это:
¬ƒ§rYV} ̳5Äš · НИСС (ñïX8Þ; б
Я сузил проблему до знака плюса, который находится в зашифрованной строке. Метод PHP GET, похоже, переводит знак плюса в пустое пространство. Я искал эту ошибку и узнал, что она уже была зарегистрирована здесь. Я пробовал разные методы, перечисленные на этой странице, и другие без успеха. Самое близкое, что я получил, это:
$fixedstring = str_replace(" ", "+", $string);
а затем используя $fixedstring в методах шифрования, проблема заключается в том, что при расшифровке все пробелы преобразуются в знаки плюс. Любые идеи?
Я знаю, что использование POST имеет смысл, но я использую GET по определенным причинам. Я пощажу детали.