Entradas populares

miércoles, 17 de agosto de 2011

Encriptar y Des-Encriptar con java

Hola a todos... ahora en mi corta vida de programador ha entrado un nuevo lenguaje al cual muchos programadores le temen (me incluyo XD) pero creo que esto se debe a la poca información que a veces encontramos en la web (información en español).

En mi trabajo actual se le ha ocurrido la grandiosa idea de cambiar las plataformas de trabajo (Sistema Operativo). Entonces nos hemos visto en la necesidad de buscar un lenguaje potente y versátil para migrar nuestro sistema interno, lo cual después de un intenso debate (no se nos vino otro a la cabeza :D) llegamos a la conclusión que debemos implementar java en todas nuestras nuevas aplicaciones. Ya que java puede correr en los dos S.O que manejamos en la empresa.

Y una de las grandes necesidades que se plantearon fue la de encriptar pequeñas cadenas de caracteres para una conexión a nuestra base de datos cosa que me tomo algún tiempo en encontrar por eso ahora les comparto el código con ejemplo.

package jpostconfig;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.spec.*;
import java.io.*;

public class ClsEncriptar {
     public static String encriptar(String cleartext, String key)
            throws Exception {
        return crypt(cleartext, key, Cipher.ENCRYPT_MODE);   
    }


    public static String desEncriptar(String ciphertext, String key)
            throws Exception {
        return crypt(ciphertext, key, Cipher.DECRYPT_MODE);   
    }

    private static String crypt(String input, String key, int mode)
            throws Exception {

        // Install SunJCE provider
        Provider sunJce = new com.sun.crypto.provider.SunJCE();
        Security.addProvider(sunJce);
        
        KeyGenerator kgen = KeyGenerator.getInstance("Blowfish");
        kgen.init(448);
        SecretKey skey = kgen.generateKey();

        byte[] raw = key.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "Blowfish");
           
        Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding");
        cipher.init(mode, skeySpec);

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ByteArrayInputStream bis = new ByteArrayInputStream(input.getBytes());
        CipherOutputStream cos = new CipherOutputStream(bos, cipher);

        int length = 0;
        byte[] buffer =  new byte[8192];

        while ((length = bis.read(buffer)) != -1) {
           cos.write(buffer, 0, length);
        }

        bis.close();
        cos.close();

        return bos.toString();
    }
}

Y les dejo un proyecto en NetBeans(versión 7.01) para que lo puedan revisar todo el codigo implementado.
Para llamar la clase no necesitan instanciarlo pero si capturar las excepciones.

SOLO FUNCIONA BAJO WINDOWS AUN NO SE PORQUE XD

http://www.megaupload.com/?d=TRAQICS7

Tomado de : http://www.forosdelweb.com/1063555-post13.html

No hay comentarios: