Ho uno script PHP che fa la crittografia di base di una stringa mediante il metodo seguito:PHP - segno più con richiesta GET
<?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;
?>
Un esempio di URL per crittografare una stringa sarebbe simile a questa:
?Encrypt.php method = Encrypt & str = rapido volpe
quale sarebbe tornato questo come la stringa crittografata:
LCUT/ieVa6cl3/4VtzE + jd9QPT3kvHY YJFqG6tY3P0Q =
Ora per decriptare la stringa di tutto ciò che dovete fare è modificare la query "metodo" a "decifrare", in questo modo:?
Encrypt.php method = decifrare & str = LCUT/ieVa6cl3/4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
l'unico problema è che quando viene decifrato che stringa crittografata restituisce questo:
¬ƒ§rYV} ̳5Äš · NSSI (ñïX8Þ; b
ho ristretto il problema alla segno più questo è nella stringa crittografata. Il metodo GET di PHP sembra tradurre un segno più in uno spazio vuoto. Ho cercato questo bug e ho scoperto che è già stato archiviato here. Ho provato diversi metodi elencati in quella pagina e altri senza successo. Il più vicino ho ottenuto è quello di utilizzare questo:
$fixedstring = str_replace(" ", "+", $string);
e quindi utilizzando $ fixedstring nei metodi di crittografia, il problema è, su decrittazione, tutti gli spazi vuoti vengono convertiti in segni più. Qualche idea?
So che usare il POST avrebbe più senso, ma sto utilizzando GET per motivi specifici. Risparmierò i dettagli.
So che è una risposta semplice, ma sto inviando tramite GET per un certo motivo. – user
Questa è la risposta corretta al tuo problema. Se si desidera utilizzare un segno più letterale ovunque in un URL, indipendentemente dal linguaggio utilizzato sul lato server, DEVE essere codificato, ad esempio sostituendolo con "% 2B". Ciò è dovuto al fatto che più segni negli URL vengono utilizzati come riferimento per i caratteri dello spazio e qualsiasi script sul lato server li interpreterà correttamente come caratteri di spazio. – thomasrutter
ah whoops vedo questa risposta è stata modificata. Oh bene, ora è corretto. +1 – thomasrutter