Wprowadzam do prostego schematu autoryzacji. Myślę, że najłatwiejszym sposobem na zrobienie tego bez SSL lub innego uwierzytelnienia HTTP byłoby szyfrowanie za pomocą klucza wspólnego. Adaptacja prosty przykład z podręcznika PHP, wpadłem na następujący:Wysyłanie zaszyfrowanych zaszyfrowanych ciągów za pomocą parametru adresu URL - zdekodowany tekst jest zniekształcony
$text = "boggles the invisible monkey will rule the world";
$key = "This is a very secret key";
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $text, MCRYPT_MODE_ECB, $iv);
$iv = base64_encode($iv);
$enc = base64_encode($enc);
echo '<a href="temp2.php?iv='.$iv.'&text='.$enc.'">link</a><br />';
strony, która odbiera to żądanie (temp2.php) wygląda następująco:
$key = "This is a very secret key";
$iv = base64_decode($_GET["iv"]);
$enc = base64_decode($_GET["text"]);
$crypttext = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB, $iv);
echo "$crypttext<br>";
To staje się bardzo blisko, ale nie dekodować properly-- to echa
boggles the invisible monkey will rule t—;eôügJë
nie jestem pewien co odwieszenie ma, próbowałem urlencode/urldecode i htmlentities, myśląc Może char Aktor został zmanipulowany we wniosku, ale bez różnicy.
Czy jest coś jeszcze, czego mi brakuje? Być może dopełnienie?
Dzięki
Ciągi Base64 często kończą się znakiem '='. Założę się, że tracisz jeden podczas analizy adresu URL (ponieważ = jest to coś specjalnego). Spróbuj 'urlencode (base64_encode())'? –
Plus, powinieneś publikować te dane, ponieważ istnieją ograniczenia dotyczące rozmiaru łańcucha pobierania (jest tam na nowoczesnych serwerach, ale one istnieją) – ircmaxell
@Frank Farmer - Próbowałem trasy urlencode/decode. Nie pomogło. @ Ircmaxwell-- masz rację, ale początkowo jest to całkiem mały ciąg. – julio