Codificación como Base64 en Java

Resuelto Jury A asked hace 12 años • 19 respuestas

Necesito codificar algunos datos en codificación Base64 en Java. ¿Cómo puedo hacer eso? ¿Cuál es el nombre de la clase que proporciona un codificador Base64?


Intenté utilizar la sun.misc.BASE64Encoderclase, sin éxito. Tengo la siguiente línea de código Java 7:

wr.write(new sun.misc.BASE64Encoder().encode(buf));

Estoy usando Eclipse. Eclipse marca esta línea como un error. Importé las bibliotecas requeridas:

import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;

Pero nuevamente, ambos se muestran como errores. Encontré una publicación similar aquí .

Utilicé Apache Commons como solución sugerida al incluir:

import org.apache.commons.*;

e importar los archivos JAR descargados de: http://commons.apache.org/codec/

Pero el problema todavía existe. Eclipse todavía muestra los errores mencionados anteriormente. ¿Qué tengo que hacer?

Jury A avatar Oct 28 '12 21:10 Jury A
Aceptado

Necesitas cambiar la importación de tu clase:

import org.apache.commons.codec.binary.Base64;

Y luego cambie su clase para usar la clase Base64.

Aquí hay un código de ejemplo:

byte[] encodedBytes = Base64.encodeBase64("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
byte[] decodedBytes = Base64.decodeBase64(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));

Luego lea por qué no debería utilizar paquetes sun.* .


Actualización (2016-12-16)

Ahora puedes usarlo java.util.Base64con Java 8. Primero, impórtalo como lo haces normalmente:

import java.util.Base64;

Luego use los métodos estáticos Base64 de la siguiente manera:

byte[] encodedBytes = Base64.getEncoder().encode("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));

Si desea codificar una cadena directamente y obtener el resultado como una cadena codificada, puede usar esto:

String encodeBytes = Base64.getEncoder().encodeToString((userName + ":" + password).getBytes());

Consulte la documentación de Java para Base64 para obtener más información.

Frank avatar Oct 28 '2012 14:10 Frank

Utilice la clase nunca demasiado tarde para unirse a la diversión de Java 8:java.util.Base64

new String(Base64.getEncoder().encode(bytes));
bratan avatar Mar 28 '2014 05:03 bratan