En seguida haremos una aplicación que nos permitirá cifrar nuestros datos de conexión introducidos en un formulario, cuando la conexión sea establecida con éxito podremos exportar en un archivo de texto estos datos.
El algoritmo utilizado se llama DES.
Descarga el proyecto aquí
Vista de la aplicación final
Para el proyecto he creado 2 clases la primera llamada ConexionBd la cual contiene un método que nos permitirá establecer la conexión con la base de datos antes de exportar el archivo cifrado.
Parte de la clase ConexionBd
1 // Método que servira para probar el acceso a la base de datos antes 2 //de generar el archivo .ini 3 public void conectar() { 4 try { 5 Class.forName("com.mysql.jdbc.Driver").newInstance(); 6 Connection conexion = DriverManager.getConnection("jdbc:mysql://" + 7 getServidor() + ":" + getPuerto() + "/" + getBd(), getUsuario(), getContrasena()); 8 if(conexion != null) 9 JOptionPane.showMessageDialog(null, "¡Conexión exitosa!."); 10 11 } catch (Exception e) { 12 JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); 13 } 14 }
La segunda clase llamada EncriptaArchivo como su nombre lo dice es la encargada de encriptar los datos que ingresemos en el formulario.
Parte de la clase EncriptaArchivo
1 /* Inicializar cifrador en modo CIFRADO */ 2 cifrador.init(Cipher.ENCRYPT_MODE, desKey); 3 //Cifrando datos de conexión 4 byte servidorBytes[] = cifrador.doFinal(servidor.getBytes()); 5 //Convirtiendo variable port a String. 6 byte puertoBytes[] = cifrador.doFinal(String.valueOf(puerto).getBytes()); 7 byte bdBytes[] = cifrador.doFinal(bd.getBytes()); 8 byte usuarioBytes[] = cifrador.doFinal(usuario.getBytes()); 9 byte contrasenaBytes[] = cifrador.doFinal(contrasena.getBytes()); 10 11 /* La encriptación genera una cadena de bytes, por lo que si se almacena de esta manera 12 * en un archivo o una base de datos podria ocacionarnos problemas al momento de leerla. 13 * Para evitar dicho problema, utilizamos la codificación BASE64. 14 */ 15 BASE64Encoder base64 = new BASE64Encoder(); 16 cadenaEncriptada[0] = base64.encode(servidorBytes); 17 cadenaEncriptada[1] = base64.encode(puertoBytes); 18 cadenaEncriptada[2] = base64.encode(bdBytes); 19 cadenaEncriptada[3] = base64.encode(usuarioBytes); 20 cadenaEncriptada[4] = base64.encode(contrasenaBytes);
Nota: Recordar que es necesario importar a bibliotecas el driver JDBC para el buen funcionamiento del proyecto.
Espero les sea útil para el desarrollo de sus sistemas y nos vemos en la tercera entrega.
Recuerda: Si te ha servido el contenido del artículo y lo has utilizado, tu comentario de agradecimiento u opinión será bienvenido para continuar mejorando...
9 comentarios:
Espero la tercera entrega, pero esto también serviría para una aplicación web?... Necesito cifrar la cadena de conexión en web, donde el servidor del hosting accede a mi servidor para extraer datos, pero los miedos siempre surgen al momento de subir tus archivos al hosting, ya que ahi se subiría también esa cadena de conexión ^^... Espero alguna sugerencia o comentario al respecto.
ah y lo olvidaba, mi aplicación web está en JSP =)
amigo, descargo el proyecto.. pero no encuentro la clase que encripta , al igual que la interfaz para encriptar los parametros de conexion ala bd... podrias subirlo porfas
Que tal amigo mira la clase que encripta esta en la carpeta GenerarIni - src- lib- EncriptaArchivo.java. El proyecto tienes que ejecutarlo con NetBeans. Y encontraras un JAR ejecutable en la carpeta AplicacionFinal. Espero haber ayudado.
Gracias, Tu código me sirvió de mucho. Bien explicado.
Hola funciona bien, pero como jalo los datos encirptados del ini?
Hola Livio, en este Post explico como jalamos los datos de conexión del archivo .INI http://javawebmas.blogspot.mx/2011/07/cifrando-los-datos-de-conexion-base-de.html
Es la parte 3 del proyecto.
Me alegra que les sirva. En breve empezare a publicar temas relacionados con el uso de reportes con JasperReport y iReport como diseñador.
Que pasa si alguien pone esto System.out.println();
verian los datos ejecutan por cmd ?
/ Método que servira para probar el acceso a la base de datos antes
2 //de generar el archivo .ini
3 public void conectar() {
4 try {
5 Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println(getServidor() + ":" + getPuerto() + "/" + getBd(), getUsuario(), getContrasena());
6 Connection conexion = DriverManager.getConnection("jdbc:mysql://" +
7 getServidor() + ":" + getPuerto() + "/" + getBd(), getUsuario(), getContrasena());
8 if(conexion != null)
9 JOptionPane.showMessageDialog(null, "¡Conexión exitosa!.");
10
11 } catch (Exception e) {
12 JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
13 }
14 }
Publicar un comentario