Codificación base64 y seguridad de URL Cómo funciona base64
De entre ellos, y 127, 33 son caracteres de control no imprimibles.
Algunas puertas de enlace de correo electrónico eliminan silenciosamente los caracteres de control de los mensajes de correo electrónico.
Algunos programas iniciales incluso tenían errores al recibir caracteres internacionales entre .
¿Cómo transmitir de forma segura caracteres de control, caracteres internacionales e incluso archivos binarios entre diferentes puertas de enlace de correo electrónico?
Entonces, como parte del estándar de correo electrónico multimedia MIME, surgió base64.
1.a ¿Qué es la codificación base64 url_safe?
En la codificación base64 tradicional anterior, hay dos símbolos + y / que se escapan directamente mediante URL, por lo que si desea transmitir estas cadenas codificadas a través de URL, debe
realice la codificación tradicional, primero la codificación Base64, luego reemplace + y / con - _ caracteres respectivamente, y luego decodifique inversamente la cadena en el extremo receptor
http://www.ietf.org/rfc/rfc4648.txt
Copiar código
/**
* Decodificación URL base64
* '-' -> '+'
* '_' ->'/'
* Longitud de cadena restante %4, agregue ' ='
* @param desconocido $cadena
*/
función urlsafe_b64decode($string) {
$data = str_replace(array('-','_'),array('+' ,'/') ,$cadena );
$mod4 = strlen($datos) % 4;
if ($mod4) {
$datos .= substr(' === =', $mod4);
}
return base64_decode($data);
}
/**
* Codificación URL base64
* '+' -> '-'
* '/ ' -> '_'
* '= ' ->''
* @param desconocido $cadena
*/
función urlsafe_b64encode($cadena) {
$ datos = base64_ encode($cadena);
$datos = str_replace(array('+','/','='),array('-','_',' '), $data);
Devolver $data;
}
Copiar código
2: Explica cómo funciona base64 en uno oración ?
El contenido de N bytes corresponde a 8*N bits. Cada 6 bits se cortan en 1 segmento para obtener (8*N)/6 unidades. , están todos en el medio, y luego empalma los caracteres ASCII correspondientes a los valores, ¡y está bien!
base64_encode('PHP') ==> 'UEhQ', el proceso de codificación es el siguiente:
3: Si cada 6 bits se cortan en 1 segmento, pero no se pueden dividir por un número entero, luego el restante. ¿Qué pasa con los siguientes 2 o 4 dígitos?
Utilice "0" para formar 6 bits y luego conviértalos en caracteres en la "tabla de caracteres base64".
Luego, utilizando los caracteres "=" como 6 dígitos, continúe rellenando hasta que el número total de dígitos sea divisible por 8.
Resultado de codificación de secuencia binaria de cadena (el rojo está relleno)
PHP 010100 000100 100001 010000 UEhQ
it 011010 010111 0100
00 xxxxxx
aXQ=
bool 011000 100110 111101 101111 011011 00
0000 xxxxxx xxxxxx
Ym9vbA==
4: base64 de imágenes
En la demostración anterior, puede ver que base64 también puede codificar archivos binarios como imágenes y archivos adjuntos en correos electrónicos. Imágenes y archivos adjuntos.
Después de codificar, podemos representar la imagen directamente en el código fuente de una página web o correo electrónico,
sin tener que poner la imagen en el servidor y consultar el enlace.
Ejemplo: base64('abc.png') ==> 'encoded-result';
Luego en la página web,
¿Ves la estrella de cinco puntas debajo? Haga clic derecho en el código fuente y verá que la imagen es una cadena
5: El cambio en bytes después de la codificación base64
Es fácil encontrar que después de la codificación, cada 6 El bit se convertirá en el octavo bit.
Por lo tanto, el número de bytes después de la codificación es un 33% mayor que antes de la codificación.
6: ¿Puedes eliminar el "=" al final de la cadena base64?
De acuerdo con las reglas de codificación anteriores, se puede inferir que durante el proceso de decodificación base64, se debe borrar el signo igual final.
Luego verifique el "índice y alfabeto base64" y convertirla es la secuencia de bytes original.
Por lo tanto, después de eliminar el signo igual final, la información original no se pierde, sino que la estructura se vuelve irregular.
La verificación de la integridad antes de la decodificación depende de su aplicación.
Probar la función base64_decode en PHP no prueba la integridad del signo igual final.