martes, 17 de enero de 2012

Criptografía simétrica y asimétrica

La criptografía se usa para ntercambiar mensajes que sólo puedan ser leídos por usuarios a las que van dirigidos y que poseen los medios para descifrarlos.

Mediante una clave secreta, ciframos un mensaje y después podemos descrifrar el mensaje con la misma clave u otra distinta. De esta forma hay dos tipos de algoritmos, según cantidad de claves:
  • Critografía simétrica
  • Criptografía asimétrica
Ahora os voy a explicar brevemente cada uno y al final tenéis una comparativa entra las dos.

lunes, 16 de enero de 2012

Exclusión mutua en Java con Lock

java.util.concurrent.locks.ReentrantLock es una clase en Java para la exclusión mutua, con el mismo comportamiento que los monitores Synchronized pero con más funciones. Entre ellas podemos encontrar:

  • 1. tryLock(): coger el cerrojo si es posible, sino devuelve false.
  • 2. tryLock(long timeout, TimeUnit unit): coger el cerrojo antes del timeout y devuelve false después del timeout.
  • 3. lockInterruptibly():intenta coger el cerrojo y entrar en el estado wait, pero puede ser interrumpido por otro hilos.

Para iniciarlo:
private Lock cerrojo = new ReentrantLock();


Un ejemplo de como asegurar una variable:
dialog.addWindowListener(new WindowAdapter(){
    publicvoid windowClosing(WindowEvent we){
        cerrojo.lock();
        desconectando = true;
        cerrojo.unlock();
    }

});
 
Aquí tenéis la documentación: Enlace. 

miércoles, 11 de enero de 2012

Ejemplo MD5 en Java

MD5 es uno algoritmo de reducción criptográfico.

MD5 se utiliza para comprobar que lo que descargamos de internet es el archivo original y no un troyano. También se utiliza para comprobar claves guardando el valor hash en disco y comparando con éste. Aplicando MD5 obtenemos un valor hash de 32 dígitos hexadecimales. Este valor se envía junto con el archivo. El usuario compara el valor hash del archivo obtenido con el valor hash que le han proporcionado y si no son iguales estamos seguros que el archivo ha sufrido un cambio y no es el original.
import java.io.FileInputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
public class MD5 {
    public static String getMD5(String entrada) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(entrada.getBytes());
            BigInteger number = new BigInteger(1, messageDigest);
            String hashtext = number.toString(16);
            while (hashtext.length() < 32) {
                hashtext = "0" + hashtext;
            }
            return hashtext;
        }
        catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
 
    public static void main(String[] args) throws NoSuchAlgorithmException {
        System.out.println(getMD5("Nuestra Clave"));
    }
}

Podemos cambiar el algoritmo MD5 por MD2, MD4, SHA...

Añadir un evento a un botón Swing

Éste es el código para añadir un evento a un botón Swing en Java.
   private JButton boton = new JButton("Botón");

   boton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
         System.out.println("Click!");
      }
   }); 
 
Aquí tenéis la documentación: Enlace

No dejar redimensionar una ventana SWT

shell = new Shell(SWT.DIALOG_TRIM | SWT.MIN); 

De esta forma bloqueamos el redimensionamiento de una ventana(shell) en SWT. Sería el equivalente en swing de

frame.setResizable(false);


Escribimos en el constructor del shell las propiedades y listo.
Si queremos añadir más restricciones a la ventana podemos concatenar cualesquiera de esta lista:
SWT.BORDER 
SWT.CLOSE 
SWT.MIN 
SWT.MAX 
SWT.RESIZE 
SWT.TITLE 
SWT.NO_TRIM 
SWT.SHELL_TRIM 
SWT.DIALOG_TRIM 
SWT.MODELESS 
SWT.PRIMARY_MODAL 
SWT.APPLICATION_MODAL 
SWT.SYSTEM_MODAL 

Añadir una barra de progreso a un navegador embebido

Aquí os dejo el código para poder añadir una barra de de progreso a un navegador embebido que está incrustado en un composite de SWT.

public class NavegadorEmbebidoSWT extends Composite {
  private Browser browser;
  ProgressBar progressBar;
  boolean busy;
  int index;

  public NavegadorEmbebidoSWT(Composite parent, String urlEntorno) {
    super(parent, SWT.NONE);

    GridLayout layout = new GridLayout(2, true);
    setLayout(layout);

    browser = new Browser(this, SWT.NONE);
    GridData layoutData = new GridData(GridData.FILL_BOTH);
    layoutData.horizontalSpan = 2;
    layoutData.verticalSpan = 2;
    browser.setLayoutData(layoutData);
    
    //Barra de progreso
    progressBar = new ProgressBar(this, SWT.NONE);
 progressBar.setLocation(600, 5);
 progressBar.setSize(108, 23);
 
 browser.addProgressListener(new ProgressListener() {
      public void changed(ProgressEvent event) {
          if (event.total == 0)
            return;
          int ratio = event.current * 100 / event.total;
          if (progressBar != null)
            progressBar.setSelection(ratio);
          busy = event.current != event.total;
          if (!busy) {
            index = 0;
          }
        }

        public void completed(ProgressEvent event) {
          if (progressBar != null)
            progressBar.setSelection(0);
          busy = false;
          index = 0;
        }
      });
    
    browser.setUrl(urlEntorno);
 
  }
  
}

Simplemente instanciáis un composite de este tipo y ya tenéis un navegador con su barra de progreso embebido. Con el método browser.setUrl podéis poner la url que queráis cargar.

martes, 10 de enero de 2012

Referenciar librerías jar en un ejecutable .bat

Esta mañana he estado intentando crear un ejecutable .bat en windows donde ejecutaba un fichero jar. He tenido problemas a la hora de referenciar las librerías. El error que me daba era:

exception in thread main java.lang.noclassdeffounderror

Ahora os voy a explicar como lo he solucionado.

martes, 27 de diciembre de 2011

Tutorial: Ventana con Java Swing

El paquete Swing es parte de "Java Foundation Classes" que provee facilidades a los programadores a la hora de construir una interfaz gráfica o GUI. Swing abarca componentes como tablas, marcos, etiquetas, botones... Se les llama componentes Swing porque pertenecen al paquete javax.swing. Antes de la JDK 1.1 las interfaces gráficas se realizaban a través de AWT o Abstract Window Toolkit, de donde Swing ha heredado todo el manejo de eventos. 



Una aplicación Swing se consigue mezclando componentes que siguen estas reglas:
  • Debe existir, al menos, un contenedor de alto nivel (Top-Level Container), que provee el soporte a los componentes Swing para que estas se pinten y puedan manejar eventos.
  • Habrá más componentes colgando de este contenedor de alto nivel, bien sean contenedores o componentes simples.

lunes, 19 de diciembre de 2011

Tutorial Hibernate y JavaServer Faces (JSF)

En este tutorial usaremos NetBeans para crear una aplicación web que recoja datos de una base de datos y los enseñe en una página web mediante java Server faces (JSF). La aplicación web usa el Framework Hibernate como capa de persistencia para la recuperación y el almacenamiento de Plain Old Java Objects (POJO).

Requerimientos mínimos:


Creando la base de datos

Creamos una base de datos con el dump “sakila”, un ejemplo gratuito que esta disponible en la página de MySQL. Podéis usar cualquier herramienta para administrar la base de datos como phpMyAdmin, MySQL Administrator, Emma…

Creando el proyecto de la aplicación web

Ahora crearemos una aplicación web. Añadiremos las librerías de Hibernate y JSF.

lunes, 28 de noviembre de 2011

Ganar dinero con Google AdSense y Admob

Google AdSense Admob
La forma más normal de ganar dinero en Internet es poniendo publicidad en tus sitios web. Se pueden publicar anuncios de todo tipo pero cada vez es más normal utilizar los servicios de Google AdSense y Google Admob.

Google AdSense

Google AdSense es un servicio de Google donde el webmaster inserta anuncios basados en texto o con imágenes y recibe una cantidad de dinero por cada click que el visitante haga en el anuncio o visite la página con el anuncio.

Para empezar ha ganar dinero hay que hacer una petición al equipo de Google e insertar un código Javascript que te ofrecerán. Tu página no puede tener contenido pornográfico ni "pop-up"s o "dialers". Si tu web ha sido aceptado en unos instantes podrás empezar a poner anuncios y ha ganar dinero. Si los anuncios no son visibles no hay que alarmarse, hay que darles tiempo. 

viernes, 25 de noviembre de 2011

Error Ubuntu. No init fount. Try passing init = bootarg.

El anterior día al iniciar Ubuntu me apareció el siguiente error antes de iniciar el sistema operativo:
No init fount. Try passing init = bootarg.

Esto error puede surgir por apagar o hibernar de malas maneras el ordenador. Busqué en internet para ver como se solucionaba e hice lo siguiente:
Para empezar necesitamos un live cd o un usb con la ISO de Ubuntu. Para conseguir el usb nos bajamos el programa "unetbootin", lo ejecutamos y elegimos la imagen ISO de nuestra versión de Ubuntu. Ésto lo podemos hacer bien en Windows o Linux. Al grabar la imagen reiniciamos el ordenador e iniciamos desde el el live cd o presionando f12 o f10 iniciamos desde el usb.

jueves, 24 de noviembre de 2011

Leer un archivo property desde Java

Los ficheros .properties de Java son unos ficheros que nos permiten almacenar variables de configuración de nustra aplicación. Son ficheros de texto que almacenan un par clave valor, de esta forma:

###################################################
# Configuración Aplicación                        #
###################################################
#Esta variable en blanco para pruebas en local:
APP.PRUEBA=
#Ruta donde se encuentra el fichero de topología
APP.RUTA_FICHERO_TOPOLOGIAS=D:/MisProyectos/lecturapuertos

Para cargar un fichero y leer una propiedad haremos lo siguiente: