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.
Ver Código Interfaz...
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:
Ver Código 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 🙂
Desbloquea el contenido con una acción social...
Comparte este articulo y obtén el contenido premium!
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