Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Criptografía / Java / Encriptación simétrica en java

Encriptación simétrica en java

Autor jc mouse miércoles, mayo 28, 2014

En este post veremos un ejemplo sencillo de encriptación/desencriptación simétrica que el API de Java nos permite realizar.

AES Java

Para realizar la encriptación en java se usa la clase Chiper junto al método getInstance( String transformation), donde transformation puede ser de la forma:

«algoritmo de encriptacion / modo / relleno»

«algoritmo»

Java soporta los siguientes algoritmos

DES (Data Encryption Standard) desarrollado por IBM en los 70. Es uncifrado de bloque de 56-bit
TripleDES. Consiste en aplicar el algoritmo DES tres veces con dos claves dando un resultado de 112 bits.
AES. Es el algoritmo que reemplazo a DES. Creado por Joan Daemen y Vincent Rijmen. Es un cifrado por bloque de 128-bit con claves de longitud 128, 192 o 256 bits.
RC2, RC4, and RC5.
Blowfish. Fue creado por Bruce Schneier y hace un cifrado por bloques con claves de longitud variable desde 32 a 448 bits (en múltiplos de 8).
PBE. (Password Based Encryption) puede ser usado con algoritmos de clave privada y funciones de resumen.

 MODO DE ENCRIPTACION

– Ninguno
– ECB (Electronic Code Book)
– CBC (Cipher Block Chaining)
– CFB (Cipher Feedback Mode)
– OFB (Output Feedback Mode)
– PCBC (Propagating Cipher Block Chaining)

RELLENO

– Ninguno
– PKCS5
– OAEP
– SSL3

Ejemplo:

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
 * @web http://www.jc.mouse.net/
 * @author Mouse
 */
public class Seguridad {

    private SecretKey key;       
    private Cipher cipher;  
    private String algoritmo= "AES";
    private int keysize=16;
    /**
 * Crea la Llave para encriptar/desencriptar
 * @param String value
 */
    public void addKey( String value ){
        byte[] valuebytes = value.getBytes();            
        key = new SecretKeySpec( Arrays.copyOf( valuebytes, keysize ) , algoritmo );      
    }

     /**
 * Metodo para encriptar un texto
 * @param String texto
 * @return String texto encriptado
 */
    public String encriptar( String texto ){
        String value="";
        try {
            cipher = Cipher.getInstance( algoritmo );             
            cipher.init( Cipher.ENCRYPT_MODE, key );             
            byte[] textobytes = texto.getBytes();
            byte[] cipherbytes = cipher.doFinal( textobytes );
            value = new BASE64Encoder().encode( cipherbytes );
        } catch (NoSuchAlgorithmException ex) {
            System.err.println( ex.getMessage() );
        } catch (NoSuchPaddingException ex) {
            System.err.println( ex.getMessage() );
        } catch (InvalidKeyException ex) {
            System.err.println( ex.getMessage() );
        } catch (IllegalBlockSizeException ex) {
            System.err.println( ex.getMessage() );
        } catch (BadPaddingException ex) {
            System.err.println( ex.getMessage() );
        }
        return value;
    }

     /**
 * Metodo para desencriptar un texto
 * @param texto Texto encriptado
 * @return String texto desencriptado
 */
    public String desencriptar( String texto ){
        String str="";        
        try {
            byte[] value = new BASE64Decoder().decodeBuffer(texto);                 
            cipher = Cipher.getInstance( algoritmo );            
            cipher.init( Cipher.DECRYPT_MODE, key );
            byte[] cipherbytes = cipher.doFinal( value );
            str = new String( cipherbytes );                                  
        } catch (InvalidKeyException ex) {
            System.err.println( ex.getMessage() );
        }  catch (IllegalBlockSizeException ex) {
            System.err.println( ex.getMessage() );
        } catch (BadPaddingException ex) {
            System.err.println( ex.getMessage() );            
        }   catch (IOException ex) {
            System.err.println( ex.getMessage() );
        }catch (NoSuchAlgorithmException ex) {
            System.err.println( ex.getMessage() );
        } catch (NoSuchPaddingException ex) {
            System.err.println( ex.getMessage() );
        }
        return str;
    }
}

Prueba

public class Main {

    public static void main(String[] args) {

        Seguridad sec = new Seguridad();

        sec.addKey("Bolivia");
        System.out.println( "Hola Mundo" );

        System.out.println( " ------------ Encriptado ------------ " );
        String texto = sec.encriptar("Hola Mundo");
        System.out.println( texto );

        System.out.println( " ------------ Desencriptado ------------ " );
        System.out.println( sec.desencriptar( texto ) );        
    }
}

🙂

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

UML Java: easyUML plugins para Netbeans

UML Java: easyUML plugins para Netbeans

easyUML es una herramienta para crear diagramas UML para NetBeans de forma visual. Adecuado para el aprendizaje de este...

Fragmentos dinamicos y eventos de usuario

Fragmentos dinamicos y eventos de usuario

Continuando con los tutoriales sobre fragmentos en android, en esta oportunidad veremos como añadir Fragments dinámicame...

Tojorí – Java/MySQL

Tojorí – Java/MySQL

Tojorí es una libreria Java/Mysql para la creación de aplicaciones de base de datos utilizando el IDE de Netbeans desde...

JASYPT : Cifrado simplificado Java

JASYPT : Cifrado simplificado Java

Jasypt es una biblioteca java que permite agregar capacidades básicas de encriptación a proyectos con el mínimo esfuerzo...

Evaluar expresiones matemáticas en Java con JavaScript

Evaluar expresiones matemáticas en Java con JavaScript

Java 8 trae consigo una nueva versión del motor de JavaScript llamada Nashorn, este motor introduce mejoras de rendimien...

Potigol: Lenguaje de programación en portugues

Potigol: Lenguaje de programación en portugues

Oi galera, en esta oportunidad les traigo una curiosidad que encontré por casualidad perdiendo el tiempo en Internet, se...

14 comentarios en “Encriptación simétrica en java”

  1. Pakosis dice:

    Muy bueno.. Gracias!
    He encontrado tu sitio y ando leyendo todos tus posts acerca de Android.
    Respecto al tema de estilos, configuración de layouts, coloritos y medidas.. Se me hace un poco lioso tanta etiqueta y codigos diferentes e inter-combinados..
    ¿existe algun truco para no tener que gastar demasiado tiempo en aprender a manejar esta «especie de css» o no queda mas remedio que leerse la documentación y empaparse de todos ellos?
    Gracias

    1. Mouse dice:

      hay programas que te permiten crear aplicaciones android con poco conocimientos de programación, pero entonces donde esta el chiste de crear aplicaciones propias 🙂 pero siempre puedes hacer uso del entorno grafico de desarrollo ya sea en eclipse o android studio, si se mete mano al código es porque asi tienes 100% de control en todo lo que pasa en tu aplicación 🙂

      saludos

      1. el web-onazo dice:

        Android Studio, no se cual es, lo buscare.

        Saludos.

    2. el web-onazo dice:

      Una consulta Sabes si puede hacerse un reporte con grafica pero que los colores de la grafica sea con condiciones?

      osea qe si la consulta me dice que es azul, que la columna de la grafica sea azul, si dice que es negro, que se pinte de negro.

      Saludos.

  2. jairo mora dice:

    Muy buen aporte amigo muchas gracias, me has enseñado mucho y muy buena explicacion 😀

  3. Ross dice:

    Hola me gustaria saber si pudieras ayudarme un poco en la parte de boton de remover producto

  4. Timo dice:

    Muy bueno el programa, como puedo hacer para que la imagen que se usa, en vez de ser nuestra la suba el usuario que utiliza la aplicación. Seria mas interesante

    gracias

  5. Jonny Julian dice:

    Oye que gran aporte, Muchas Gracias, tengo una Pregunta, mi pregunta como puedo hacer para que arranque cuando inicia windows y conectarlo a una bases de datos remota. ejemplo: arranco windows esta iniciando sesion se una se ejecute tu aplicativo sin que entre al escritorio

  6. Lazaro dice:

    Amigo, muchas gracias por tu aporte, tengo una duda como se haría un dominó con el Patron MVC, lo estoy intentando hacer de 1 solo jugador. he intentado pero nada que me sale.

    P.D:
    Me encanta el dominó 😀

    1. Mouse dice:

      🙂 no se jugar dominó 🙁 pero debes seguir lo que dice el patrón MVC y separar la lógica del juego con su interfaz todo esto primero en papel y después lo pasas a codigo

  7. Max dice:

    Felicitaciones por los aportes que realizas, te voy siguiendo de PERÜ , muy buen post..

  8. aldo tellez dice:

    excelente llevaba tiempo buscando algo asi

  9. Becky dice:

    Disculpa tengo un problema al usar la libreria sun.misc , me dice que BASE64Decoder no es un API. Podrias ayudarme por favor

  10. gabyta dice:

    hola me sirvio mucho tu codigo pero soy un poco nueva en java y necesito encriptar y desencriptar un documento pdf que tengo almacenado en la bbdd como tipo byte. Me puedes ayudar

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Melody.ml  es un aplicación online que usa la I.A (Inteligencia Artificial) para procesar archivos MP3 y separar en pist...

Small Basic es un lenguaje de programación propiedad de Microsoft creado especialmente para ayudar a los estudiantes a p...

Lorca Editor es una aplicación online creada por el desarrollador español Domingo Martin el cual tiene como objetivo el...

Eratóstenes era un matemático griego del siglo  III a.C. el cual ideó una manera rápida de obtener todos los números pri...

Herramientas

Generador de Enlaces a Whatsapp