Estoy jugando con un simple esquema de autorización. Creo que la manera más sencilla de hacerlo sin SSL u otros HTTP auth sería un cifrado de clave compartida. La adaptación de un ejemplo sencillo de el manual de PHP, se me ocurrió la siguiente:

$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 />';

La página que recibe esta solicitud (temp2.php) se parece a esto:

$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>";

Esto se pone muy cerca, pero no decodificar correctamente– se hace eco de

boggles the invisible monkey will rule t—;eôügJë

No estoy seguro de lo que la tara es, traté de urlencode/urldecode y htmlentities, pensando que tal vez un carácter fue destrozada en la solicitud, pero no hay diferencia.

Hay algo que me falta? Tal vez relleno?

Gracias

Base64 cadenas con frecuencia final en el = char. Apuesto a que estás perdiendo uno durante el análisis de la URL (puesto que = es algo de especial char). Trate de urlencode(base64_encode())?
Además, usted debe ser la publicación de estos datos, ya que no hay límites para el tamaño de la cadena (es allí, en los servidores modernos, pero existen)
Agricultor … he probado el urlencode/decodificación de la ruta. No ayuda. @ircmaxwell– tienes razón, pero esta es una muy pequeña cadena inicialmente.

OriginalEl autor julio | 2011-04-22

1 Comentario

  1. 29

    Lo que ocurre es que su texto cifrado se terminan buscando algo como:

    Z5DlBqT8yEB4HKLkAlvfJoWaHgnNVLFh7jls6L85sLriedc82uFQxm+M62I41oB7

    Ver que el signo más que hay? Además de los signos en la Url de llegar a convertirse en espacios.

    Cuando la conversión manual de que signo más a un espacio y descifrar el resultado, la salida es el dañado basura que he presenciado.

    Debe ejecutar el IV y el texto cifrado a través de rawurlencode (no urlencode) antes de pegar en el enlace. Esto va a codificar correctamente el signo más, que se preservan a través del proceso. Usted no necesita (y no debe) urldecode la cadena en el otro lado — PHP se han hecho esto para usted.

    lo que ocurre es que la implementación de PHP de decodificación de base64 ignora falta o extra signos de igualdad en la final. Otras implementaciones pueden no ser tan liberal, por lo que, efectivamente, podría ser un problema en otras circunstancias.

    OriginalEl autor Charles

Dejar respuesta

Please enter your comment!
Please enter your name here