Cifrando los datos de conexión a base de datos en Java y MySql 3 de 3

Después de un buen rato de ausencia escribiré la tercera y ultima parte del proyecto para encriptar los datos de conexión a nuestra Base de Datos.

Esta parte consiste en hacer la interfaz para leer el archivo encriptado generado con la aplicación programada aquí "Cifrando los datos de conexión a base de datos en Java y MySql 2 de 3"

Descarga el proyecto aquí

Vista de la aplicación final



Hay que pegar el archivo .INI (archivo encriptado) que generemos en la raíz del proyecto (PARTE 3) para que pueda ser leído, cuando la conexión es establecida se hacemos una consulta a la Base de Datos para recuperar unos registros que colocaremos en un JComboBox. En el proyecto encontraran una clase llamada DesencriptaArchivo.java la cual se encarga de leer el archivo .INI y desencriptar los datos.

Parte de la clase DesencriptaArchivo.java
 1     /**
 2      * Lee y desencripta los datos de conexión a la base de datos que se encuentran
 3      * en un archivo de texto.
 4      */
 5     public void desencriptaDatos() {
 6         Cipher cifrador = null;
 7 
 8         /* PASO 1: Crear e inicializar clave */
 9         String semilla = "dhjlaSG";
10 
11         // Generamos una clave secreta.
12         SecretKeySpec desKey = new SecretKeySpec(
13                 new String((semilla.trim().concat("62364770")).substring(0, 8))
14                 .getBytes(), "DES");
15         //System.out.println("CLAVE:" + new String(desKey.getEncoded()) + "\n");
16 
17         try {
18             /* PASO 2: Crear cifrador */
19             cifrador = Cipher.getInstance("DES/ECB/PKCS5Padding");
20 
21             // Algoritmo DES
22             // Modo : ECB (Electronic Code Book)
23             // Relleno : PKCS5Padding
24 
25             /* PASO 3: Poner cifrador en modo DESCIFRADO */
26             cifrador.init(Cipher.DECRYPT_MODE, desKey);
27 
28         } catch (NoSuchAlgorithmException noSuchAlgorithmException) {
29         } catch (NoSuchPaddingException noSuchPaddingException) {
30         } catch (InvalidKeyException invalidKeyException) {
31         }
32 
33         /* PASO 4: Leer archivo en el cual estan guardados los datos de conexión. */
34         File f = new File(System.getProperty("user.dir") + nombreArchivo);
35         try {
36             FileReader fr = new FileReader(f);
37             BufferedReader br = new BufferedReader(fr);
38             String fila, cadena;
39             String cadenaDesencriptada[] = new String[6];
40 
41             int i=0;
42             while((fila = br.readLine()) != null) {
43                 //Si el caracter "=" esta en alguna posición de la cadena leida entra al IF.
44                 if(fila.indexOf("=") != -1) {
45                     int inicio = fila.indexOf("=");
46                     int t_cadena = fila.length();
47                     //Toma sólo los datos encriptados de la cadena.
48                     cadena = fila.substring(inicio+1, t_cadena);
49                     byte cadenaDesencriptadaBytes[] = new BASE64Decoder().decodeBuffer(cadena);
50                     cadenaDesencriptada[i] = new String(cifrador.doFinal(cadenaDesencriptadaBytes));
51                 }
52                 i++;
53             }
54 
55             //Se comienza a leer el arreglo apartir de 1 y no de 0 porque la primera
56             //linea del archivo es un comentario "[CONFIGURACION]".
57             this.servidor = cadenaDesencriptada[1];
58             this.puerto = Integer.parseInt(cadenaDesencriptada[2]);
59             this.bd = cadenaDesencriptada[3];
60             this.usuario = cadenaDesencriptada[4];
61             this.contrasena = cadenaDesencriptada[5];            
62             br.close();
63 
64         } catch (FileNotFoundException e) {
65             JOptionPane.showMessageDialog(null, e.getMessage(), "Error de archivo .INI", 
66                     JOptionPane.ERROR_MESSAGE);
67         } catch (Exception e) {
68             JOptionPane.showMessageDialog(null, e.toString(), "Error", 
69                     JOptionPane.ERROR_MESSAGE);
70         }
71     }


Nota: Recordar que es necesario importar a bibliotecas el driver JDBC para el buen funcionamiento del proyecto.

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...

Cifrando los datos de conexión a base de datos en Java y MySql 2 de 3

Esta es la segunda parte de la entrega.

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...

Cifrando los datos de conexión a base de datos en Java y MySql 1 de 3

Después de un buen rato de ausencia les traigo un buen proyecto y muy útil por cierto, en seguida paso a explicarlo.

Esta aplicación constara de 3 partes; en la primera seda una breve introducción de lo que haremos, en la segunda parte cifraremos los datos de conexión y en la tercera parte leeremos el archivo cifrado para establecer la conexión a una base de datos y leer una serie de registros.

Al momento de desarrollar un sistema tenemos que considerar ciertas medidas de seguridad para evitar el acceso a ciertos recursos, una de las cosas muy importantes que debemos de hacer es cifrar nuestros datos de conexión que utilizamos para hacer consultas a nuestro motor de base de datos.

Es de suma importancia cifrarla dirección IP de nuestro servidor, nombre de la base de dato, usuario y contraseña para evitar poner en riesgo esta información sensible a raíz de esto se hará una aplicación para cifrar la información utilizada para conectarnos al motor de base de datos.

Ejemplo de archivo final cifrado:

Búsqueda de información en Base de Datos con MySql y PHP

Como en toda aplicación que lleguemos a desarrollar nos veremos en la necesidad de hacer búsquedas en bases de datos filtrando de esta manera únicamente los datos que queremos mostrar.

En el siguiente Post haremos una aplicacion para la búsqueda de información con PHP y MySql, para llevar acabo esto crearemos 2 archivos PHP, uno para la conexión con nuestra base de datos y otro archivo que va a contener las consultas SQL.

El archivo a descargar contiene la tabla utilizada y registros para su carga.

Descarga el proyecto aquí

En seguida pego un fragmento esencial del código que se encarga de hacer la consulta a la base de datos y mostrar los registros.
 1   <?php
2 //Entra al if mientras haya datos en el formulario.
3 if(isset($_POST['txtBuscaMateria']) and $_POST['txtBuscaMateria']<>"") {
4 ?>
5 <table width="100%" border="0" style="border:solid 1px #CCC;">
6 <tr bgcolor="#FFFF99" height="24" style="font-weight:bold; color:#000;">
7 <td align="center">ID</td>
8 <td>Nombre Materia</td>
9 </tr>
10 <?php
11 require("conexion.php");
12 //Consulta con el fin de saber si existen registros.
13 $conSQL = mysql_query("SELECT id FROM materias
WHERE nombre LIKE '%"
.$_POST['txtBuscaMateria']."%' ORDER BY id");
14 $numeroRegistros = mysql_num_rows($conSQL);
15
16 if($numeroRegistros <= 0) { //comprueba que existan registros.
17 echo "<tr><td colspan='6' align='center'><br>
NO SE ENCONTRO INFORMACION</td></tr>"
;
18 }else {
19 //Creación de la consulta.
20 $conSQL = mysql_query("SELECT id,nombre FROM materias
WHERE nombre LIKE '%"
.$_POST['txtBuscaMateria']."%' ORDER BY id");
21
22 while($datos=mysql_fetch_array($conSQL)) {
23 ?>
24 <tr>
25 <td align="center"><?php echo $datos['id'];?></td>
26 <td><?php echo $datos['nombre'];?></td>
27 </tr>
28 <?php
29 } //Fin while
30 } //Fin if ?>
31 </table><br />
32 <?php
33 } //Fin if ?>
Una imagen de como se ve la aplicación final.


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...

Método para migrar datos de Excel a Mysql

Hay ocasiones en las que nos vemos en la necesidad de importar datos que tenemos almacenados en una hoja de Microsof Office Excel a una tabla de MySql, podemos tener miles de registros guardados en la hoja de Excel y seria impráctico copiar cada registro de manera manual a la tabla, de ahí que nos puede ser muy útil este método que explico en seguida que puede importar 70 000 registros en cuestión de segundos.

Para que esto sea posible tiene que coincidir el número de columnas de la hoja de Excel con el número de columnas de la tabla y además en la tabla tienen que estar definidos los campos con el tipo de dato correcto para que pueda albergar los registros.

  • Lo primero que tenemos que hacer es guardar el archivo de Excel en formato .CSV separado por comas.
  • En plataformas Windows colocar el archivo en C:. Entrar en modo consola a MySql, seleccionar la base de datos y escribir lo siguiente:
 1 load data infile '/nombreArchivo.csv'
2 into table nombreTabla
3 fields terminated by ','
4 lines terminated by '\r\n';
Como el archivo se genero en plataforma Windows hay que escribir lines terminated by '\r\n' para leer correctamente el archivo

Me despido esperando que sea de ayuda. Hasta la próxima...

Instalando JDK para programar en Java

Para empezar a programar en Java necesitamos descargar el Kit de desarrollo, lo hacemos desde la página web de Oracle que es la oficial.

Descargar JDK de Java

  • Elegimos la primera opcion que solo dice Java.
  • Seleccionamos la plataforma.
Al terminar la descarga ejecutamos el instalador
  • Aceptamos el contrato.
  • En la ventana siguiente lo dejamos tal cual y continuamos con el proceso hasta terminar con la instalación.



Con estos pasos básicos deberíamos de tener nuestro JDK instalado, ahora lo que hacemos es instalar un IDE por ejemplo NetBeans para el desarrollo rápido de aplicaciones.

Descargar IDE NetBeans

Al instalar NetBeans automáticamente reconocerá el JDK que tenemos instalado, por lo que nos resta darle siguiente hasta finalizar su instalación ya que con los parámetros que trae el instalador configurados nos bastara para programar aplicaciones en Java.

Ahora si a programar y recordar que si hay dudas al respecto háganlas saber.

Cambiando el tamaño de las columnas de un JTable

Por defecto al crear un JTable Java ajusta las columnas de la tabla de acuerdo a la información que contiene, en muchas ocasiones necesitaremos redimensionar estas columnas segun nuestros requerimientos.

Descarga el proyecto aquí

En seguida escribo un método que nos permitirá hacer esto de una manera fácil.

 1 /**
2 * Asignamos el ancho fijo para cada columna de la tabla.
3 */
4 private void setAnchoColumnas() {
5 int anchoTabla = 638; //Ancho del jScrollPane1.
6 int anchoColumna = 0, anchoColumnaMin = 0, anchoColumnaMax = 0;
7 //TableColumn nos provee de métodos para minimizar, maximizar,etc. columnas de tabla.
8 TableColumn columnaTabla = null;
9
10 for(int i=0; i<tblNombres.getColumnCount(); i++) {
11 //Obtenemos el modelo de las columnas de la tabla.
12 columnaTabla = tblNombres.getColumnModel().getColumn(i);
13
14 switch(i) {
15 case 0: anchoColumna = (20*anchoTabla)/100; //20 representa el porcentaje del ancho total
16 anchoColumnaMin = (20*anchoTabla)/100; //que ocupara la primera columna.
17 anchoColumnaMax = (20*anchoTabla)/100;
18 break;
19 case 1: anchoColumna = (35*anchoTabla)/100;
20 anchoColumnaMin = (35*anchoTabla)/100;
21 anchoColumnaMax = (35*anchoTabla)/100;
22 break;
23 case 2: anchoColumna = (35*anchoTabla)/100;
24 anchoColumnaMin = (35*anchoTabla)/100;
25 anchoColumnaMax = (35*anchoTabla)/100;
26 break;
27 case 3: anchoColumna = (10*anchoTabla)/100;
28 anchoColumnaMin = (10*anchoTabla)/100;
29 anchoColumnaMax = (10*anchoTabla)/100;
30 break;
31 }
32
33 //Aplicamos el ancho para cada columna de la tabla.
34 columnaTabla.setPreferredWidth(anchoColumna);
35 columnaTabla.setMinWidth(anchoColumnaMin);
36 columnaTabla.setMaxWidth(anchoColumnaMax);
37 }
38 }

Imagen de las columnas del JTable redimensionado del proyecto para descarga.



Espero que les sirva el ejemplo.

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...

Mostrando registros de una base de datos en un JComboBox

Acceso a datos por medio de un JComboBox . Explico en qué consiste el proyecto, el JComboBox mostrara una serie de materias donde los datos que carga se encuentran almacenados en una base de datos creada en MySql (la tabla es incluida en el proyecto para descargar).

Descarga el proyecto aquí

Lo primero que haremos es colocar un JComboBox en el formulario (el formulario esta dentro de un paquete llamado vista) y le daremos el nombre de cboMaterias.

Para tener mejor control del JComboBox crearemos un modelo de datos llamado modeloCboMaterias
 1 //Declarando el modelo de datos.
2 private javax.swing.DefaultComboBoxModel modeloCboMaterias;
3
4 /** Creates new form Principal */
5 public Principal() {
6 modeloCboMaterias = new javax.swing.DefaultComboBoxModel(new String[] {});
7 initComponents();
8 iniCboMaterias(); //Cargando con datos al JComboBox.
9 }

Propiedades del JComboBox y lugar donde debemos de escribir el nombre del modelo.



Imagen de como se veria nuestro formulario terminado:



y esto es todo por hoy.

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...
 
Codigo java & Diseño web - Netbeans - Jasper Report © 2010 | Volver arriba