TripleDES con Java


Hace poco revisando algo de información acerca de métodos de encriptación o cifrado, revisaba básicamente acerca de DES y TripleDES, especificamente por temas laborales, bueno encontre muchas clases y formas de poder trabajar con DES desde Java pero muy pocas con TripleDES y me preguntaba porque, pues bueno, resulta que TripleDES es una “mejora” del DES obviamente y como su propio nombre lo dice es generar cadenas cifradas utilizando tres veces el algoritmo DES pero teniendo en cuenta algunos parametros, para algunos quizas esto sea algo risorio pero creanme, hay gente que no conoce estos temas. No voy ha entrar a temas teóricos para eso tenemos la wiki :).

Escribi una clase simple de ejemplo que muestra la forma de hacerlo, aqui lo propongo , espero obtener mejoras en base a comentarios y si hay que hacer correcciones tambien y ademas espero sea utilidad para muchos.

Para esto utilize una libreria para DES que la descargue de aqui

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.encripta;
import java.security.InvalidKeyException;

/**
 *
 * @author nachxs
 */

public class TripleDES {
    DES tdes = new DES();
    private static final int BLOCK_128 = 16;
    private static final int BLOCK_192 = 24;

    public String encrypt3DES(String str, String key) throws Exception {
        String enc = null;
        try {
            if (key.length() == 32) {
                byte[] keys = new byte[BLOCK_128];
                keys = FunctionByte.hex2byte(key);
                byte[] k1 = new byte[8];
                byte[] k2 = new byte[8];
                System.arraycopy(keys, 0, k1, 0, 8);
                tdes.setKey(k1);
                byte[] encode_1 = tdes.encrypt(FunctionByte.hex2byte(str));
                System.arraycopy(keys, 8, k2, 0, 8);
                tdes.setKey(k2);
                byte[] encode_2 = tdes.decrypt(encode_1);
                tdes.setKey(k1);
                byte[] encode_3 = tdes.encrypt(encode_2);
                enc = FunctionByte.toHEX1(encode_3);
                System.out.println("Encripta TipleDES: " + str + " --> " + enc);
            } else if (key.length() == 48) {
                byte[] keys = new byte[BLOCK_192];
                keys = FunctionByte.hex2byte(key);
                byte[] k1 = new byte[8];
                byte[] k2 = new byte[8];
                byte[] k3 = new byte[8];
                System.arraycopy(keys, 0, k1, 0, 8);
                tdes.setKey(k1);
                byte[] encode_1 = tdes.encrypt(FunctionByte.hex2byte(str));
                System.arraycopy(keys, 8, k2, 0, 8);
                tdes.setKey(k2);
                byte[] encode_2 = tdes.decrypt(encode_1);
                System.arraycopy(keys, 16, k3, 0, 8);
                tdes.setKey(k3);
                byte[] encode_3 = tdes.encrypt(encode_2);
                enc = FunctionByte.toHEX1(encode_3);
                System.out.println("Encripta TipleDES: " + str + " --> " + enc);
            } else {
                throw new InvalidKeyException("ERROR: Longitud de la llave incorrecta");
            }
        } catch (Exception ex) {
            throw ex;
        }
        return enc;
    }

    public String dencrypt3DES(String str, String key) throws Exception {
        String denc = "";
        try {
            if (key.length() == 32) {
                byte[] keys = new byte[BLOCK_128];
                keys = FunctionByte.hex2byte(key);
                byte[] k1 = new byte[8];
                byte[] k2 = new byte[8];
                System.arraycopy(keys, 0, k1, 0, 8);
                tdes.setKey(k1);
                byte[] decode_3 = tdes.decrypt(FunctionByte.hex2byte(str));
                System.arraycopy(keys, 8, k2, 0, 8);
                tdes.setKey(k2);
                byte[] decode_2 = tdes.encrypt(decode_3);
                tdes.setKey(k1);
                byte[] decode_1 = tdes.decrypt(decode_2);
                denc = FunctionByte.toHEX1(decode_1);
                System.out.println("Desencripta TipleDES: " + str + " --> " + denc);
            } else if (key.length() == 48) {
                byte[] keys = new byte[BLOCK_192];
                keys = FunctionByte.hex2byte(key);
                byte[] k1 = new byte[8];
                byte[] k2 = new byte[8];
                byte[] k3 = new byte[8];
                System.arraycopy(keys, 16, k3, 0, 8);
                tdes.setKey(k3);
                byte[] decode_3 = tdes.decrypt(FunctionByte.hex2byte(str));
                System.arraycopy(keys, 8, k2, 0, 8);
                tdes.setKey(k2);
                byte[] decode_2 = tdes.encrypt(decode_3);
                System.arraycopy(keys, 0, k1, 0, 8);
                tdes.setKey(k1);
                byte[] decode_1 = tdes.decrypt(decode_2);
                denc = FunctionByte.toHEX1(decode_1);
                System.out.println("Desencripta TipleDES: " + str + " --> " + denc);
            } else {
                throw new InvalidKeyException("ERROR: Longitud de la llave incorrecta");
            }
        } catch (Exception ex) {
            throw ex;
        }
        return denc;
    }
}
Anuncios

7 thoughts on “TripleDES con Java

  1. Excelente!!… una pregunta.. como puedo hacer para que archivo (seleccionado con JFileChoosser) se encripte con este algoritmo???..

  2. Buenas, estoy usando el algoritmo.. pero quería saber como se usa esa libreria.. por que no es publica. Necesita estar en un paquete? alguna ayuda de como incluir esa librería al proyecto? gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s