Sinal de adição com consulta GET
Eu tenho um script PHP que faz criptografia básica de uma seqüência de caracteres através do método abaixo:
<?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;
?>
Um exemplo de URL para criptografar uma string seria assim:
Método Encrypt.php? = Encrypt & str = the quick fox
O que retornaria isso como a cadeia criptografada:
LCuT / ieVa6cl3 / 4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
Agora, para descriptografar a string, tudo o que você precisa fazer é alterar a consulta "method" para "descriptografar", da seguinte maneira:
Método Encrypt.php? = Decriptografar & str = LCuT / ieVa6cl3 / 4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
O único problema é que, quando essa cadeia criptografada é descriptografada, ela retorna isso:
Yƒ§rYV} 5³5Äš · nßì (ñïX8Þ; b
Eu reduzi o problema ao sinal de adição que está na cadeia criptografada. O método GET do PHP parece converter um sinal de mais em um espaço em branco. Eu procurei este bug e descobri que ele já foi arquivadoaqui. Eu tentei diferentes métodos listados nessa página e outros sem sucesso. O mais próximo que cheguei é usando isso:
$fixedstring = str_replace(" ", "+", $string);
e, em seguida, usando $ fixedstring nos métodos de criptografia, o problema é que, por descriptografia, todos os espaços em branco são convertidos em sinais de adição. Alguma ideia?
Eu sei que usar o POST faria mais sentido, mas estou usando o GET por razões específicas. Vou poupar os detalhes.