validar getencoder getbytes encodebase64string encode64 decodificar como java base64

java - getencoder - Error al intentar codificar/decodificar una cadena a Base64



java getbytes base64 (9)

¿Podrías intentarlo?

byte[] bytes = new byte[]{1,2,3,4,5,6,7,8,9}; String stringToStore = new String(Base64.encode(bytes)); byte[] restoredBytes = Base64.decode(stringToStore.getBytes());

Necesito hacer la codificación Base64 desde la matriz de bytes hasta la agitación en lugar de otra matriz de bytes Pero cuando lo descifro me vuelvo loco. Aquí está el código

Estoy tratando de codificar una matriz de bytes en una cadena usando la codificación Base64. Cuando codifico, parece que funciona, pero cuando decodifico se produce una excepción. ¿Qué estoy haciendo mal?

import org.springframework.security.crypto.codec.Base64; byte[] bytes = new byte[]{1,2,3,4,5,6,7,8,9}; String stringToStore = Base64.encode(bytes).toString(); byte[] restoredBytes = Base64.decode(stringToStore.getBytes());

Aquí está la excepción que estoy recibiendo:

org.springframework.security.crypto.codec.InvalidBase64CharacterException: Bad Base64 input character decimal 91 in array position 0 at org.springframework.security.crypto.codec.Base64.decode(Base64.java:625) at org.springframework.security.crypto.codec.Base64.decode(Base64.java:246)


Base64.encode (bytes) .toString () no devuelve la cadena que espera.

Deberías usar

new String(Base64.encode(bytes))

según lo sugerido por iccthedral.


Esto funciona para mí:

byte[] bytes = new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; String stringToStore = Base64.encode(bytes); //System.out.println(stringToStore);//AQIDBAUGBwgJ byte[] restoredBytes = Base64.decode(stringToStore); //System.out.println(Arrays.toString(restoredBytes));//[1, 2, 3, 4, 5, 6, 7, 8, 9]

Lo he editado un poco:

  • No llame a toString() en una String . encode(bytes) método de encode(bytes) ya devuelve una String (como lo anotaron los demás que llaman, esto podría ser el resultado del error)
  • ¿Por qué convertir a bytes cuando no se necesita solo más código ( Base64.decode(stringToStore.getBytes()) )

Inicialmente, si está utilizando esto para contraseñas, no se recomienda convertir a cadenas. Para usar como String siga el siguiente segmento de código

byte[] bytes = new byte[]{1,2,3,4,5,6,7,8,9}; String stringToStore = new String(Base64.encode(bytes), "UTF-8"); byte[] restoredBytes = Base64.decode(stringToStore.getBytes());


Para decodificar la matriz de bytes que contiene contenido base64 puede usar javax.xml.bind.DatatypeConverter . Funciona bastante bien. Lo uso para decodificar los valores de MongoDB de tipo binario.

String testString = "hi, I''m test string"; byte[] byteArrayBase64 = org.apache.commons.codec.digest.DigestUtils.md5(testString); String decoded = javax.xml.bind.DatatypeConverter.printBase64Binary(byteArrayBase64); assert testString.equals(decoded);


Probé Base64 desde el codec de Apache , y el resultado está bien.

import org.apache.commons.codec.binary.Base64; byte[] bytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Base64 base64 = new Base64(); byte[] stringToStore = base64.encode(bytes); System.out.print(Arrays.toString(stringToStore));//[65, 81, 73, 68, 66, 65, 85, 71, 66, 119, 103, 74] byte[] restoredBytes = base64.decode(stringToStore); System.out.print(Arrays.toString(restoredBytes));//[1, 2, 3, 4, 5, 6, 7, 8, 9]


Si está utilizando Android API 8+, hay una clase de ayuda Base64 en android.util .

String stringToStore = Base64.encodeToString(cipherText, Base64.DEFAULT);


Base64.decode() parece devolver un byte/[/] . La llamada a toString() te da una descripción predeterminada de Java de la matriz, nada como "56AB0FC3 ...". Necesitarías hacer esa conversión tú mismo.

Del mismo modo, su llamada a getBytes() no hace nada de lo que piensa.


String stringToStore = Base64.encode(bytes).toString();

Eso no es convertir los bytes en una cadena. Es la representación de cadena de Java del objeto (por ejemplo, "[B@9a4d5c6" ). Debe hacer lo que iccthedral sugiera y proporcionar los bytes a una clase String.