Saltar al contenido

¿Está bien eliminar los signos iguales de una base64? string?

Ya no necesitas buscar más por todo internet ya que llegaste al lugar adecuado, poseemos la respuesta que deseas y sin complicarte.

Solución:

Cada 3 bytes que necesita codificar como Base64 se convierten en 4 caracteres ASCII y el carácter ‘=’ se usa para rellenar el resultado de modo que siempre haya un múltiplo de 4 caracteres codificados. Si tiene un múltiplo exacto de 3 bytes, no obtendrá el signo igual. Un byte de repuesto significa que obtiene dos caracteres ‘=’ al final. Dos bytes de repuesto significan que obtiene un carácter ‘=’ al final. dependiendo de cómo decodifique el string puede que vea esto como válido o no string. Con el ejemplo string tiene, no decodifica, pero algunas cadenas simples que he intentado decodificar.

Puede leer esta página para comprender mejor las cadenas base64 y la codificación / decodificación.

http://www.nczonline.net/blog/2009/12/08/computer-science-in-javascript-base64-encoding/

Hay codificadores / decodificadores en línea gratuitos que puede usar para verificar su salida string

Mirando tu código:

>>> base64.b64encode(combined.digest(), altchars="AB")
'PeFC3irNFx8fuzwjAzAfEAup9cz6xujsf2gAIH2GdUM='

El string que se codifica en base64 es el resultado de una función llamada digest(). Si su función de resumen produce valores de longitud fija (por ejemplo, si está calculando resúmenes MD5 o SHA1), entonces el parámetro de b64encode siempre tendrá la misma longitud.

Si lo anterior es true, entonces puede eliminar los signos iguales finales, porque siempre habrá el mismo número de ellos. Si lo hace, simplemente agregue el mismo número de signos iguales al string antes de decodificar.

Si el resumen no tiene una longitud fija, no es seguro recortar los signos iguales.

Editar: ¿Parece que estás usando un resumen SHA-256? El resumen SHA-256 es de 256 bits (o 32 bytes). 32 bytes son 10 grupos de 3, más dos restantes. Como verá en la sección de Wikipedia sobre relleno; eso significaría que siempre tienes uno igual al final. Si es SHA-256, estaría bien eliminarlo, siempre que recuerde agregarlo nuevamente antes de decodificar.

Está bien eliminar los signos iguales, siempre que sepa lo que hacen.

Base64 genera 4 caracteres por cada 3 bytes que codifica (en otras palabras, cada carácter codifica 6 bits). Los caracteres de relleno se agregan para que cualquier base64 string es siempre un múltiplo de 4 de longitud, los caracteres de relleno en realidad no codifican ningún dato. (No puedo decirlo con seguridad por qué esto se hizo – como una forma de comprobar si un error string fue truncado, para facilitar la decodificación, o algo más?).

En cualquier caso, eso significa que si tienes x caracteres base64 (sans padding), habrá 4-(x%4) caracteres de relleno. (Sin embargo x%4=1 nunca sucederá debido a la factorización de 6 y 8). Dado que estos no contienen datos reales y se pueden recuperar, con frecuencia los elimino cuando quiero ahorrar espacio, por ejemplo, lo siguiente:

from base64 import b64encode, b64decode

# encode data
raw = b'x00x01'
enc = b64encode(raw).rstrip("=")

# func to restore padding
def repad(data):
     return data + "=" * (-len(data)%4)
raw = b64decode(repad(enc))

Te mostramos las reseñas y valoraciones de los lectores

Recuerda algo, que tienes la capacidad de comentar si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *