Ben aşağıda yöntemi ile bir dize temel şifreleme yapan bir PHP komut dosyası var:
<?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;
?>
Bir dize şifrelemek için bir URL örneği şuna benzer:
Encrypt.php? Yöntemi = şifrelemek & str = hızlı tilki
Şifreli bir dize olarak bu dönecekti Hangi:
LCuT/ieVa6cl3/4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
Şimdi dize şifresini yapmanız gereken bu yüzden gibi, "deşifre" etmek "yöntem" sorguyu değiştirmektir:
Encrypt.php?method=decrypt&str=LCuT/ieVa6cl3/4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
Tek sorun o şifreli dize deşifre olduğunda bu döndürür olduğunu:
B; ¬ ƒ rYV} Ì ³ 5aS · nßì (ñïX8Þ §
Ben şifreli string içinde artı işareti sorunu daralmış. PHP'nin GET yöntemi bir boş alana bir artı işareti çevirmek gibi görünüyor. Ben bu hatayı araştırdım ve zaten dava olduğunu öğrendim here. Ben hiçbir başarı ile bu sayfada ve diğerleri listelenen farklı yöntemler denedim. I got yakın bu kullanmaktır:
$fixedstring = str_replace(" ", "+", $string);
ve daha sonra şifreleme yöntemlerinde $ fixedstring kullanılarak problem çözme üzerine, tüm boşluklar artı işaretleri dönüştürülür vardır. Herhangi bir fikir?
I know using POST would make more sense but I am using GET for specific reasons. I will spare the details.