Mostrando entradas con la etiqueta Fundam de Programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta Fundam de Programacion. Mostrar todas las entradas

27 oct 2014


En la entrada Manejo de archivos de propiedades en Java. vimos como trabajar con archivos de propiedades pero recordemos que en todo desarrollo debe de haber un grado de seguridad y mas en cuestiones de este tipo, los archivos de propiedad se almacenan en la máquina del cliente y este puede abrir fácilmente el archivo, la mayoría de usuarios finales no son expertos en informática y tal vez no les interese como funcione pero, imagina que alguna otra persona con intenciones malas y con un conocimiento medio en esta rama podría valerse de entrar en la computadora del  usuario y si has almacenado los datos para una conexión a base de datos en un archivo sin cifrar estarías exponiendo un grave fallo de seguridad al dejar eso datos a la vista de todos, así que en esta entrada aprenderemos a cifrar los datos para que no tengamos problemas con este tipo de detalles.

Para cifrar los datos nos valdremos de un API llamada Jasypt en su ultima versión 1.9.2 (http://www.jasypt.org/)  la cual se encargara de cifrar los datos que se almacenaran en el archivo de propiedades y por medio de una llave poder descifrar dichos datos.

Pasos preliminares.

Antes de adentrarnos al código es necesario realizar una configuración previa.
  • Descargar el API jasypt 1.9.2.
  • Descarga el JCE (Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files.) que permite usar otros otros algoritmos de cifrado. JCE.
  • Cuando hayas descargado los dos puntos anteriores copia el contenido de JCE en el directorio de JAVA_HOME\jre\lib\security
  • Y agrega las librerías de Jasypt a tu proyecto que se encuentran en jasypt-1.9.2-dist.zip\jasypt-1.9.2\lib
Listo con esto ya podremos empezar a trabajar.

  Sumergiéndonos en el oscuro mundo de la criptografía.

Para adentrarnos en este ejemplo utilizaremos el proyecto realizado en la anterior publicación llamado "propiedades" y que fue creado con NetBeans.

Agregamos las librerías de Jasypt al proyecto y empezamos por crear una clase de Java (Java Class) que llamaremos "EncrypSet" y en esta clase vamos a agregar los siguientes imports.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import javax.swing.JOptionPane;
import org.jasypt.encryption.pbe.PBEStringEncryptor;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.properties.PropertyValueEncryptionUtils;

y creamos un método "public static void" llamado "EncryProp" que contendría el cogido encargado de cifrar el archivo de propiedades.

public static void EncryProp () throws IOException {
       // Para nuestro proyecto declararemos 3 variables que son las que se encuentran en nuestro archivoo de propiedades       
        String crypnombre, crypap, crypam;
        //Creamos un FileOutputStream y le asignamos null
        FileOutputStream os = null;
        Properties props = new Properties();
        try {
            //cargamos el archivo propiedades en la variable "props" creada anteriormente
            props.load(new FileInputStream("src/propiedades/pconexion.properties"));
            // Aqui enpieza lo bueno, creamos una variable "encryptor" de tipo StandardPBEStringEncryptor() 
            PBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
            // Asignamos la llave (contraseña) que nos servira para cifrar el texto y posteriormente descifrar.
            encryptor.setPassword("an_$%&LOST"); // Aqui asigna la contraseña y no la vayas a olvidar porque de otra forma no podras descifrar los datos.
            //Ahora en la variables creadas al principio asignaremos el valor cifrado, les explico este paso,
            //Llamamos a la propiedad encrypt del import PropertyValueEncryptionUtils en esta nos pide el texto a cifrar
            //y la llave para hacerlo recordaremos que con la propiedad  getProperty de la variable props podremos obtener el texto del archivo..
            crypnombre = PropertyValueEncryptionUtils.encrypt(props.getProperty("nombre"), encryptor);
            crypap = PropertyValueEncryptionUtils.encrypt(props.getProperty("apaterno"), encryptor);
            crypam = PropertyValueEncryptionUtils.encrypt(props.getProperty("amaterno"), encryptor);
            //Volvemos a guardar los datos en el archivo pero ahora ya cifrados
            props.setProperty("nombre", crypnombre);
            props.setProperty("apaterno", crypap);
            props.setProperty("amaterno", crypam);
             //Con el FileOutputStream lo guardamos
             os = new FileOutputStream("src/propiedades/pconexion.properties");
             props.store(os, "Datos Encriptados."); 
           } catch(IOException ioe){ 
               JOptionPane.showMessageDialog(null,"Error al crear el archivo de Propiedades encriptado.\nInfo: "+ioe,"Creacion de Archivo.",JOptionPane.ERROR_MESSAGE);
            }    
    }

Con esto terminamos la Clase Java "EncrypSet" y pasamos al formulario llamado "principal" de nuestro proyecto.

En este formulario se encuentran 2 botones entraremos a la propiedad "ActionPerformed" del botón "guardar" y agregaremos este código.

private void b_guardarActionPerformed(java.awt.event.ActionEvent evt) { 
        //Creamos la variable props                                         
        Properties prop= new Properties();
        //validamos que ningun dato nos falte en este caso que ningun Jtextfield este vacio
        if(t_nombre.getText().isEmpty() || t_ap.getText().isEmpty() || t_am.getText().isEmpty()){
        //si alguno esta vacio manda el mensaje    
        JOptionPane.showMessageDialog(null,"Faltan datos para el archivo de configuración.","Datos faltantes.",JOptionPane.ERROR_MESSAGE);
        }else{
            //Si todo esta bien guardamos el contenido de cada uno en el archivo de propiedades
            propiedades.setProperty("nombre", t_nombre.getText());
            propiedades.setProperty("apaterno", t_ap.getText());
            propiedades.setProperty("amaterno", t_am.getText());
           try {
                FileOutputStream os = new FileOutputStream("src/propiedades/pconexion.properties");
                propiedades.store(os, "Nombre del Usuario.");
                // Y aqui es donde viene lo interesante llamamos a la clase Java que creamos con el metodo EncryProp
                EncrypSet.EncryProp();
                //Vaseamos los Jtextfields
                t_nombre.setText("");
                t_ap.setText("");
                t_am.setText("");
           } catch(IOException ioe){ 
               JOptionPane.showMessageDialog(null,"Error al crear el nuevo archivo de Propiedades.\nInfo: "+ioe,"Creacion de Archivo.",JOptionPane.ERROR_MESSAGE);
            }               
        }
    }    

A estas alturas si nosotros ejecutamos el formulario "principal" y agregamos datos al archivo de propiedades, se agregarian cifrados pero no podriamos ver en realidad lo que ingresamos.


Como vemos en la imagen de arriba los datos aparecen cifrados con un formato de "ENC(muchas letras y simbolos)" ejemplo:  ENC(acAc3Hl5QxaKwEnXNNlRQQ==) y con esto nuestra informacion queda protegida ante usuarios curiosos o malintencionados; despues de esto te preguntaras bueno y si quiero saber que es lo que hay detras de ese cifrado y ver los datos reales ¿Como lo descifro?.

Para eso es este código, primero agregamos los imports necesarios y despues entramos al atributo "ActionPerformed" del boton "Cargar".

//Agregamos estos imports
import org.jasypt.encryption.pbe.PBEStringEncryptor;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.properties.EncryptableProperties;

Y después.

private void b_cargarActionPerformed(java.awt.event.ActionEvent evt) {                                         
           try {
            //Creamos una variable "encryptor" del tipo StandardPBEStringEncryptor()
            PBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
            //a esta variable le asignamos la llave o cntraseña utilizada para cifrar los datos 
            encryptor.setPassword("an_$%&LOST");
            //Creamos una variable "settin" del tipo EncryptableProperties y agregamos "encryptor" que contiene la llave
            Properties settin = new EncryptableProperties (encryptor);
            //apartir de aqui cargamos y obtenemos los datos normalmente como lo hacemos
            settin.load(new FileInputStream("src/propiedades/pconexion.properties"));
            propiedades.load(new FileInputStream("src/propiedades/pconexion.properties"));
            //cargamos los datos ya descifrados en los string nom,ap y am
            nom = settin.getProperty("nombre");
            ap = settin.getProperty("apaterno");
            am = settin.getProperty("amaterno");
            //los mostramos en el jtextarea
            ta_ver.setText("");
            ta_ver.append("------------Datos Cifrados---------------");
            ta_ver.append(System.getProperty("line.separator"));
            ta_ver.append("Nombre = " + propiedades.getProperty("nombre"));
            ta_ver.append(System.getProperty("line.separator")); // Esto para el salto de línea 
            ta_ver.append("A Paterno = " + propiedades.getProperty("apaterno"));
            ta_ver.append(System.getProperty("line.separator")); // Esto para el salto de línea 
            ta_ver.append("A Materno = " + propiedades.getProperty("amaterno"));
            ta_ver.append(System.getProperty("line.separator")); // Esto para el salto de línea 
            ta_ver.append("------------Datos Descifrados---------------");
            ta_ver.append(System.getProperty("line.separator"));
            ta_ver.append("Nombre = " + nom);
            ta_ver.append(System.getProperty("line.separator")); // Esto para el salto de línea 
            ta_ver.append("A Paterno = " + ap);
            ta_ver.append(System.getProperty("line.separator")); // Esto para el salto de línea 
            ta_ver.append("A Materno = " + am);

          }catch (FileNotFoundException e) {
            JOptionPane.showMessageDialog(null,"Error, no existe el archivo de configuracion.\nInfo: "+e,"Error de archivo de propiedades.",JOptionPane.ERROR_MESSAGE);
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null,"Error, no se puede leer archvio de configuracion.\nInfo: "+e,"Error de archivo de propiedades.",JOptionPane.ERROR_MESSAGE);
        }
    }     

Ejecutando el archivo he ingresando datos esto es lo que obtenemos.


Así Terminamos esta entrada espero les gustara, anexo el proyecto ya modificado con este código por si gustan ocuparlo y mas adelante ocuparemos este método para realizar conexiones a MySQL.



24 oct 2014

En esta ocasión veremos el tema de los archivo de configuración en Java, aprenderemos a crearlos, guardas propiedades en el y recuperar esas propiedades para utilizarlas en nuestro desarrollo pero antes veamos un poco de teoría.

¿Que es un archivo de propiedades?

Es un archivo en el cual podremos guardar configuraciones de nuestro programa o desarrollo tales  como rutas de conexion, nombres de usuario, parámetros etc.

¿Como es su estructura?

Su estructura consta de 2 variables la primer es el id o nombre con que se identificara la propiedad esta se define al momento de crear el archivo y la segunda es el valor que contendrá la propiedad y es la que cambia de acuerdo a nuestras necesidades.
Su estructura es simple:
  • nombre_propiedad = valor

 Manos a la obra.

Empezaremos por crear el archivo de configuracion.

Creamos en NetBeans un nuevo poyecto y nombralo como gustes  una vez creado da clic derecho en el paquete de código java (java source package) > Nuevo (New) > Otros (Other) se abrirá una ventana para agregar elementos, en la sección de Categorías (Categories) nos desplazamos al final en la categoría de Otros (Other) lo seleccionamos y nos carga del lado derecho en Tipos de archivo (File Types) los archivos que podemos agregar ahí solo busca el que diga "Propiertes File" (archivo de propiedades), clic en Next y asignamos un nombre para nuestro archivo en este caso "pconexion", la dirección donde se guardara la dejaremos sin modificar.

Al dar clic en Finish se crea el archivo y lo agrega al proyecto para poder ocuparlo.

 

Operaciones Básicas.

Primero agregaremos propiedades, para esto abriremos nuestro archivo y agregaremos las 3 variables siguientes.

# To change this license header, choose License Headers in Project Properties.
# To change this template file, choose Tools | Templates
# and open the template in the editor.

nombre=
apaterno=
amaterno=

Guardamos el archivo y este es el codigo para agregar las variables.
//Importamos
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import javax.swing.JOptionPane;

//Declaramos las variables
Properties propiedades = new Properties();

//Codigo de Guardado, utilizamos la propiedad setProperty para agregar el valor como vez se tiene que poner el nombre de la propiedad y el valor que esta gurdara. 
 propiedades.setProperty("nombre", "Saul");
 propiedades.setProperty("apaterno", "Hernandez");
 propiedades.setProperty("amaterno", "Hernandez");
 try {
     //Se necesita de un FileOutputStream para poder guardarlo y la direccion
     FileOutputStream os = new FileOutputStream("src/propiedades/pconexion.properties");
     propiedades.store(os, "Nombre del Usuario.");
 } catch(IOException ioe){ 
    JOptionPane.showMessageDialog(null,"Error al crear el nuevo archivo de Propiedades.\nInfo: "+ioe,"Creacion de Archivo.",JOptionPane.ERROR_MESSAGE);
   }         

Con esto se agregan valores al archivo; abriremos el archivo pconexion.properties y veremos que se agregaron los datos.

#Nombre del Usuario.
#Fri Oct 24 17:25:08 CDT 2014
amaterno=Hernandez
nombre=Saul
apaterno=Hernandez

Después de agregar las propiedades vamos a ver como obtenerlas, en si el código es muy parecido al que se utiliza para agregar.

//Agregamos a las importaciones 
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import javax.swing.JOptionPane;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

//se agregan 3 String para los datos
   Properties propiedades = new Properties();
   String nom,ap,am;

//Y este es el codigo.
       try {
            //se carga el archivo desde la ruta con un FileInputStream
            propiedades.load(new FileInputStream("src/propiedades/pconexion.properties"));
            //con la propiedad  getProperty se optiene la informacion de cada propiedad y la guardamos en los string         
            nom = propiedades.getProperty("nombre");
            ap = propiedades.getProperty("apaterno");
            am = propiedades.getProperty("amaterno");
            //Mostramos el contenido de los string en un mensaje.
            JOptionPane.showMessageDialog(null,nom + " "+ ap +" " + am);
        }catch (FileNotFoundException e) {
            JOptionPane.showMessageDialog(null,"Error, no existe el archivo de configuracion.\nInfo: "+e,"Error de archivo de propiedades.",JOptionPane.ERROR_MESSAGE);
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null,"Error, no se puede leer archvio de configuracion.\nInfo: "+e,"Error de archivo de propiedades.",JOptionPane.ERROR_MESSAGE);
        }



Y listo con esto abremos aprendido a agregar y obtener valores de un archivo de propiedades, a continuacion dejo un pequeño desarrollo que ejemplifica lo anterior espero les sirva.


Descargas.

Descargar por 4shared.

Descargar por MEGA.




1 oct 2011

Bueno hace algún tiempo colgué en el blog el editor de Java Jcreator he incluso también el JDK para compilar el código pero desde ese entonces no he subido algún tutorial para poder instalarlo, así que en esta ocasión pondré los pasos a seguir para poder instalarlo y dejarlo totalmente funcional, pero primero algo de teoría para que entiendan que es Jcreator o JDK.
Wikipedia dice:
JCreator es un entorno de desarrollo integrado (IDE) para programación en lenguaje Java en entorno Windows. Hay dos ediciones, una gratuita, llamada LE y otra de pago llamada Pro, que entre otras cosas añade completamiento de comandos, plantillas, depuración y soporte de CVS. Entre sus ventajas destaca la de consumir menos recursos que otros IDEs, y entre los inconvenientes el ser menos completo que dichos entornos (como Netbeans, Eclipse, JBuilder, JDeveloper, y no ser libre como los dos primeros...) Fuente: Ver articulo.
Que es JDK:
Se trata de un conjunto de herramientas (programas y librerías) que permiten desarrollar (compilar, ejecutar, generar documentación, etc.) programas en lenguaje Java. Existen versiones del JDK para prácticamente todos los Sistemas Operativos y existen también distintos programas comerciales. Los JDK incorporan una herramienta de Debugger (detener la ejecución de un programa en la línea que se desee y poder conocer el valor de las variables en ese momento).
Una vez repasado estos términos empezaremos con la instalación de Jcreator y el JDK pero antes necesitas estos requisitos:
  1. Descargar Jcreator Pro desde aquí: Jcreator Pro este archivo incluye el instalador, el activador y el JDK (no me acuerdo de la versión).
  2. Como la versión del JDK del archivo anterior no esta actualizada descargaremos la ultima versión del JDK desde aquí: Descargar JDK solo vayan a la parte donde dice "Java Platform, Standard Edition" y en el apartado de JDK denle "Download", los mandara a otra pagina donde deberán macar la opción de "Accept License Agreement" para activar los links de descarga, ahora solo buscan su sistema operativo y descargan el archivo. 
  3. Paciencia, mucha paciencia y algo rico para tomar...
Para empezar la instalación ve a "Mas información".

9 mar 2010


Aqui esta la aplicacion para calcular  el promedio total de las calificaciones diseñado con Java, les pongo el codigo para que lo chequen y al final anexo el archivo para que  lo prueven.

import javax.swing.JOptionPane; //Importa Javax para usarlo en la ventanas
public class CalculoPromedio {
     
    public CalculoPromedio() {
    }
    public static void main(String[] args) {
   
 String num1, num2, num3, num4, nom;  //valores de cadena
 float cal1, cal2, cal3, cal4, resultado;  // valores flotantes
  
//mensaje de bienvenida

 JOptionPane.showMessageDialog(null, "Con esta aplicacion podras calcular tu promedio final...:");
       
   nom=JOptionPane.showInputDialog("Pon tu nombre") ; //pide el nombre
   num1=JOptionPane.showInputDialog("Ingresa la 1 calificacion:"); //pide valor 1
   num2=JOptionPane.showInputDialog("Ingresa la 2 calificacion:"); //pide valor 2
   num3=JOptionPane.showInputDialog("Ingresa la 3 calificacion:"); //pide valor 3
   num4=JOptionPane.showInputDialog("Ingresa la 4 calificacion:"); //pide valor 4
           
   cal1=Float.parseFloat(num1);//convierte el valor string a flotantes para calcular
   cal2=Float.parseFloat(num2);
   cal3=Float.parseFloat(num3);
   cal4=Float.parseFloat(num3);        
   //se valida el rango de las calificaciones 
if (cal1 < 100 & cal2<100 & cal3<100 & cal4<100 & cal1 >0 & cal2>0 & cal3>0 & cal4>0){ 
    resultado= (cal1+cal2+cal3+cal4) / 4; // se realiza el calculo
   JOptionPane.showMessageDialog(null, nom + "\n La calificacion final es: " + resultado);
}
 else{
       JOptionPane.showMessageDialog(null, "Las calificaciones deben ser > 0 y < 100");
        System.exit(0);
            } 
    }
}

Bueno pues es todo aqui se los dejo, esto fue diseñado y editado por Prox... Derechos resevados...

Pass:PROXCITE
Powered By Blogger
Subscribe to RSS Feed Follow me on Twitter!