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.
¿Qué es cifrar en Base 64?
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.
Soporte De Base64 En Java 8
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.
Librerías Para Usar Base64 En Java
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.
1 2 | import java.nio.charset.StandardCharsets; import java.util.Base64; |
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.
Métodos Para Cifrar Y Descifrar Con Base64 En Java
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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; } |
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 😉
Ejemplo Práctico Para Usar Base64 En Java
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | 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") // <editor-fold defaultstate="collapsed" desc="Generated Code">//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(); }// </editor-fold>//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 */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* 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); } //</editor-fold> /* 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 } |
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") // <editor-fold defaultstate="collapsed" desc="Generated Code">//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(); }// </editor-fold>//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 */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* 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); } //</editor-fold> /* 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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; } } |
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 🙂
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