Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Criptografía / Java / Encriptación simétrica en java

Encriptación simétrica en java

Por 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

Artículos similares

Sonidos y Eventos en Swing

La siguiente clase reproduce sonidos WAV en controles Swing de Java Netbeans, los controles son pasados en el constructo[...]

SQLite/Java conexión

SQLite. SQLite es un sistema de gestión de bases de datos relacional compatible con ACID, contenida en una relativamente[...]

Conexión a base de datos Oracle con Laravel

En esta ocasión aprenderemos a conectaros con una base de datos Oracle desde Laravel. Es un tutorial sencillo y cortito,[...]

Criba de Eratóstenes animado

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[...]

Personalizar nodos de un JTree con HTML

Una clase JTree permite mostrar datos de una forma jerárquica y en realidad este objeto no contiene sus datos; es decir,[...]

MVC: Modelo, Vista y Controlador en PHP

EL patrón MVC (Model, View, Controller) o Modelo, Vista Controlador, es un tipo de diseño que separa en capas bien defin[...]