miércoles, 28 de noviembre de 2007

Ejempo de Criptografía simétrica en Java

La criptografía simétrica es un metodo de criptografía que utiliza una misma clave para cifrar y descrifar un mensaje. Las dos partes encargadas de comunicarse deben de ponerse de acuerdo en la clave a utilizar para el envio de mensajes.


Un buen metodo de cifrado simétrico será aquel en el cual toda la seguridad se encuentre en la clave, así que no importa si el atacante sabe cual es el algoritmo de encriptación; pues de nada le sirve si no tiene la clave.


Este es un ejemplo muy sencillo de cifrado simétrico.


Platarforma Java JDK 1.6


Lo primero que se debe hacer es generar la clave que se utilizara tanto para encriptar y descriptar el mensaje, esta clave es generada bajo el Algoritmo DES.


KeyGenerator keyGen = KeyGenerator.getInstance("DES");
keyGen.init(56);
SecretKey secretKey = keyGen.generateKey();



El codigo anterior al colocarlo en nuestro programa se refiere a que dicha clave se va a generar cada vez que se encripte o desencripte un mensaje, otra manera de generar la clave y mantenerla activa esto guardando la clave en un archivo y solo llamandola al momento de utilizar.



Como ya tenemos la llave el paso seguido es encriptar el mensaje

Algoritmo DES
Modo : ECB (Electronic Code Book)
Relleno : PKCS5Padding



Cipher cifrador= Cipher.getInstance("DES/ECB/PKCS5Padding");



Iniciamos el objeto cifrador en modo Encriptación



cifrador.init(Cipher.ENCRYPT_MODE, clave);



Ahora vamos a introducir el texto a cifrar



String mensaje = "Este el texto que se va a cifrar";


Finalmente colocamos la ultima parte del codigo que son los metodos encargados de cifrar el mensaje y obtener el resultado en una cadena de byte[].


byte[] mensajeCifrado = cifrador.doFinal(mensaje.getBytes(), 0, mensaje.getBytes().lenght);



El mensaje cifrado se encuntra dentro de la variable mensajeCifrado, el cual no esta en un formato listo para impresión por lo cual solo si el usuario lo requiere este mensaje se puede codificar en base64 para mostralo en un formato más amigable.



byte[] mensajeCifradoBase64 = Base64.encode(mensajeCifrado);

Más información
Ejemplo

3 comentarios:

Anónimo dijo...

Hola,
Tengo unas dudas con un tema de criptografía en Java. Soy estudiante de Telecomunicaciones en España y me gustaría saber si te puedes poner en contacto conmigo.
Gracias: sikyvilas@gmail.com

Unknown dijo...

Que talgracias por el ejemplo unicamente con una duda fijate que me da error en esa linea:

import org.bouncycastle.util.encoders.Base64;

aparentemente no me encuentra la carpeta bouncycasltle, espero que podas ayudarme, gracias.

Rulo dijo...

Debes descargar la libreria BouncyCastle y colocar el jar correspondiente en tu solución, visita: http://bouncycastle.org