traductor online encoding base64

encoding - online - decode string



¿Es una cadena codificada en base64 única? (2)

Es una codificación, no una encriptación. Como puedes decodificar la cadena, debe ser único.

No puedo encontrar una respuesta a esto. Si codifico una cadena con Base64, ¿la salida codificada será única en función de la cadena? Lo pido porque quiero crear un token que contenga información del usuario, así que necesito asegurarme de que la salida sea única dependiendo de la información.

Por ejemplo, si codigo "UnqUserId: 987654321 Timestamp: 01/02/03", ¿será esto único así que no importa qué otro ID de usuario lo coloque nunca habrá una colisión?


Dos años tarde, pero aquí vamos:

La respuesta corta es sí, los valores únicos binarios / hexadecimales codificarán siempre en una cadena codificada en base64 única.

PERO, múltiples cadenas codificadas en base64 pueden representar un único valor binario / hexadecimal.

Esto se debe a que los bytes hexadecimales no están alineados con los ''dígitos'' de base64. Un solo byte hexadecimal está representado por 8 bits, mientras que un único dígito base64 está representado por 6 bits. Por lo tanto, cualquier valor hexadecimal que no esté alineado con 6 bits puede tener múltiples representaciones base64 (aunque los codificadores base64 implementados correctamente deberían codificar a la misma representación base64).

Un ejemplo de esta desalineación es el valor hexadecimal ''0x433356c1''. Este valor está representado por 32 bits y codificaciones base64 en ''QzNWwQ ==''. Sin embargo, este valor de 32 bits no está alineado con 6 bits. ¿Así que lo que ocurre? El codificador base64 rellena cuatro bits cero al final de la representación binaria en este caso para hacer que la secuencia sea de 36 bits y, en consecuencia, esté alineada con 6 bits.

Al decodificar, el decodificador base64 ahora tiene que decodificar en un valor alineado de 8 bits. Trunca los bits acolchados y decodifica los primeros 32 bits en un valor hexadecimal. Por ejemplo, ''QzNWwc =='' y ''QzNWwQ =='' son cadenas codificadas en base64 diferentes, pero decodifican con el mismo valor hexadecimal, 0x433356c1. Si observamos cuidadosamente, notamos que los primeros 32 bits son los mismos para estas dos cadenas codificadas:

''QzNWwc=='': 010000 110011 001101 010110 110000 011100 ''QzNWwQ=='': 010000 110011 001101 010110 110000 010000

La única diferencia son los últimos cuatro bits, que son ignorados. Tenga en cuenta que ningún codificador de base64 debe generar ''QzNWwc =='' o cualquier otro valor de base64 para 0x433356c1 que no sea ''QzNWwQ =='', ya que los bytes de relleno agregados siempre deben ser ceros.

En conclusión, es seguro suponer que un único valor binario / hexadecimal siempre codificará a una representación base64 única utilizando codificadores base64 implementados correctamente. Una ''colisión'' solo ocurrirá durante la decodificación si las cadenas base64 se generan sin poner a cero los bytes de relleno / alineación.