La protección de los datos es una parte fundamental en cualquier desarrollo que se realice. En la actualidad existen diversos métodos de encriptación que puedes usar, uno de los mas conocidos es el método de codificación y decodificacion Base64. La importancia de esto radica en la importancia de proteger los datos mas sensibles de los usuarios, aunque puede ser fácil de cifrar y descifrar, puedes usar este método criptográfico como la primer medida de protección para los datos.
Anteriormente, para usar Base64 en Java, era necesario crear la clase o el método para poder usar este método de encriptación, algo que resultaría tedioso si lo tuyo no es la criptografía 😉 Por suerte para ti y para mi, en Java 8 ya puedes hacer uso de Base64 de forma nativa.
Cuando tienes algunos datos binarios que deseas enviar a través de una red, por lo general se cifran los datos con algún método que no genere problemas en el proceso del envío y la recepción de los datos.
El método de cifrado y descifrado de Base 64 convierte los 64 caracteres ASCII imprimibles en datos no legibles para el usuario. Generalmente este método de cifrado se usa para los datos «básicos», ya que el cifrado ya es conocido y fácilmente de descifrar.
En versiones anteriores de Java 8, era necesario el uso de una librería no oficial para usar este método de cifrado, eso ya es cosa del pasado, ya que en Java 8 se ha añadido una clase para el cifrado y descifrado en base 64, la cual se encuentra en java.util.Base64. Los vamos a ejemplos de código siguientes para usarlo.
Para usar correctamente este método de cifrado y descifrado, es necesario hacer el uso de dos librerías, una es la que se ha mencionado anteriormente, y la otra… bueno, a continuación podrás ver las librerías necesarias.
import java.nio.charset.StandardCharsets;
import java.util.Base64;
La librería de la linea 1, es necesaria al momento de cifrar el mensaje con base64, la siguiente librería, es necesaria para usar tanto el método de codificado y decodificado.
A continuación veras los métodos para cifrar y descifrar texto en Java, lo podrás usar de la siguiente manera:
Cifrar: metodosBase64.cifrarBase64(Variable o texto a cifrar);
Descifrar: metodosBase64.descifrarBase64(Variable o texto a descifrar);
Los metodos son los siguientes:
public static String cifrarBase64(String a){
Base64.Encoder encoder = Base64.getEncoder();
String b = encoder.encodeToString(a.getBytes(StandardCharsets.UTF_8) );
return b;
}
public static String descifrarBase64(String a){
Base64.Decoder decoder = Base64.getDecoder();
byte[] decodedByteArray = decoder.decode(a);
String b = new String(decodedByteArray);
return b;
}
Como puedes ver, el ambito o alcance de los métodos no están limitados, si deseas cambiar el ambito de los métodos, ya es tu decisión 😉
Para aprender o ver el funcionamiento de algo, muchas veces es necesario ver un ejemplo, y este tema no es la excepción 😉 A continuación podrás ver un ejemplo de como funciona este método de cifrado en Java usando una interfaz gráfica, el ejercicio tendrá 2 clases, una donde se tenga la interfaz y en ella los eventos necesarios para el cifrado y descifrado, la otra, los anteriores método para cifras y descifrar los datos.
package ejemplobase64;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
public class EjemploBase64 extends javax.swing.JFrame implements ActionListener {
public EjemploBase64() {
initComponents();
}
@SuppressWarnings("unchecked")
// //GEN-BEGIN:initComponents
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jtCifrar = new javax.swing.JTextField();
jbCifrar = new javax.swing.JButton();
jbDescifrar = new javax.swing.JButton();
jtAResultado = new java.awt.TextArea();
jtDescifrar = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Usar base64");
setMaximumSize(new java.awt.Dimension(750, 450));
setMinimumSize(new java.awt.Dimension(750, 450));
setResizable(false);
setLocation(80, 20);
getContentPane().setLayout(null);
jPanel1.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED, null, new java.awt.Color(200, 200, 200), null, null));
jPanel1.setLayout(null);
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("Herramienta para cifrar y descifrar en base64");
jLabel1.setMaximumSize(new java.awt.Dimension(130, 14));
jLabel1.setMinimumSize(new java.awt.Dimension(130, 14));
jLabel1.setPreferredSize(new java.awt.Dimension(130, 14));
jPanel1.add(jLabel1);
jLabel1.setBounds(12, 14, 320, 14);
jLabel2.setText("Crifrar");
jPanel1.add(jLabel2);
jLabel2.setBounds(13, 49, 80, 14);
jLabel3.setText("Descifrar");
jPanel1.add(jLabel3);
jLabel3.setBounds(13, 90, 80, 14);
jtCifrar.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
jtDescifrar.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
jPanel1.add(jtCifrar);
jtCifrar.setBounds(110, 50, 100, 20);
jbCifrar.setFont(new java.awt.Font("Verdana", 1, 12)); // NOI18N
jbCifrar.setText("Cifrar");
jbCifrar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jbCifrar.addActionListener(this);
jbDescifrar.addActionListener(this);
jPanel1.add(jbCifrar);
jbCifrar.setBounds(10, 130, 120, 30);
jbCifrar.getAccessibleContext().setAccessibleName("Cifrar");
jbDescifrar.setFont(new java.awt.Font("Verdana", 1, 12)); // NOI18N
jbDescifrar.setLabel("Descifrar");
jbDescifrar.setMaximumSize(new java.awt.Dimension(91, 25));
jbDescifrar.setMinimumSize(new java.awt.Dimension(91, 25));
jPanel1.add(jbDescifrar);
jbDescifrar.setBounds(150, 130, 120, 30);
jPanel1.add(jtAResultado);
jtAResultado.setBounds(320, 30, 210, 140);
jPanel1.add(jtDescifrar);
jtDescifrar.setBounds(110, 90, 100, 20);
getContentPane().add(jPanel1);
jPanel1.setBounds(60, 40, 550, 310);
pack();
}// //GEN-END:initComponents
public void actionPerformed(ActionEvent e) {
if(e.getSource() == jbCifrar){
if(!jtCifrar.equals("")){
jtAResultado.setText("");
jtDescifrar.setText("");
jtAResultado.setText(metodosBase64.cifrarBase64(jtCifrar.getText()));
}
}else if(e.getSource() == jbDescifrar){
if(!jtDescifrar.equals("")){
jtAResultado.setText("");
jtCifrar.setText("");
jtAResultado.setText(metodosBase64.descifrarBase64(jtDescifrar.getText()));
}
}
}
/**
* @param args the command line arguments
*/ public static void main(String args[]) {
/* Set the Nimbus look and feel */ //
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/ try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("WindowsLookAndFeel".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(EjemploBase64.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(EjemploBase64.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(EjemploBase64.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(EjemploBase64.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//
/* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new EjemploBase64().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jbDescifrar;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JButton jbCifrar;
private javax.swing.JTextField jtCifrar;
private javax.swing.JTextField jtDescifrar;
private java.awt.TextArea jtAResultado;
// End of variables declaration//GEN-END:variables
}
A continuación, podrás ver el código de la clase que contiene los métodos para cifrar y descifrar en Base64:
package ejemplobase64;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class metodosBase64 {
public static String cifrarBase64(String a){
Base64.Encoder encoder = Base64.getEncoder();
String b = encoder.encodeToString(a.getBytes(StandardCharsets.UTF_8) );
return b;
}
public static String descifrarBase64(String a){
Base64.Decoder decoder = Base64.getDecoder();
byte[] decodedByteArray = decoder.decode(a);
String b = new String(decodedByteArray);
return b;
}
}
La estructura del proyecto que he manejado es la siguiente:
Como lo puedes ver es algo sencillo de usar, si deseas tener el código en el paquete para trabajarlo en Netbeans, te invito a descargarlo, solo tendrás que regalarme una acción social, ya sea una Like, Tweet o +1 😉 Vamos, no te cuesta nada 🙂
Comparte este articulo y obtén el contenido premium!
¿Has notado aplicaciones desconocidas o un drenaje inesperado de la batería? Estos podrían ser indicios…
Saber cómo Restablecer un iPhone a su Estado de Fábrica es clave para solucionar problemas…
Motorola ha confirmado el lanzamiento de Moto G84 5G y Moto G54 5G en India,…
Recuerde WizardCoder, ¿el codificador de IA que cubrimos recientemente aquí en Windows Report? Nos jactamos…
Los investigadores han descubierto numerosos fallos de seguridad en el complemento WordPress Jupiter X Core…
Para solucionar problemas del sistema de PC con Windows, necesitará una herramienta dedicada Fortect es…
Ver comentarios
Excelente!!!!!
Muchas gracias!
Muy buen tuto! Me sirvio mucho!
Mi consulta es si yo cifro en Base64 en java un cliente mío puede descifrarlo en .net?
Muchas gracias!!!
Muy buen tema
Muy buen tutorial,me gustaría saber si ha trabajado con drag and drop Java escritorio