Los criptosistemas simétricos

 


                                                                  Criptosistemas simétricos 


En un criptosistema simétrico se utiliza  una clave única tanto para cifrar como para descifrar, la  clave se envía junto con el mensaje  y el receptor la recibe para desencriptar el mensaje.

Algunos Ejemplos de aplicaciones que utilizan criptosistemas simétricos.

  • Comunicaciones seguras: los criptosistemas simétricos se utilizan  para proteger las comunicaciones entre varios destinos de esta forma garantizan que solo puedan leer los mensaje personas autorizadas, algunos canales de comunicación que utilizan estos criptosistemas son: Él correo electrónico ,las video conferencias, las llamadas telefónicas entre otros.
  • Protección de datos confidenciales: los criptosistemas simétricos también se usan para proteger la información  en dispositivos de almacenamiento como los son  Memorias USB, disco duros, entre otros de esta forma se evita que la información sea obtenida por personas no autorizadas.
  • Protección de contraseñas :  los criptosistemas simétricos se utilizan en aplicaciones de autenticación  y protección de contraseñas de esta forma se guardan las contraseñas de forma cifrada y se compara con la entrada del usuario.
  • Integridad de los datos: los criptosistemas simétricos también son utilizados para para garantizar la integridad de los datos, con el calculo de código de autenticación de mensajes (MAC). Se puede desterminar  que los datos no tienen ninguna alteración. 

ejemplo encriptación con criptosistema simétrico en java

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;
    }

Como desencriptar en java 

 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;
    }
}

                                                                       Bibliografia

·        Fúster, A., de la Guía, D., Hernández, L., Montoya, F., & Muñoz, J. (2001). Técnicas criptográficas de protección de datos. Alfaomega, Grupo Editor.Gauchat, J. D. (2017). HTML5 para Mentes Maestras, 2da Edición: Cómo aprovechar HTML5 para crear sitios web adaptables y aplicaciones revolucionarias. JD Gauchat.

·        Huerta, A. V. (2003). 55. Criptografía: historia. Teoría de números. Sistemas de clave pública. Sistemas de clave privada. Colegio Oficial de Ingeniería Informática de la Comunidad Valenciana (COIICV)

·        Mellado Ramírez, A. Ó. Criptosistema PKI usando la curva elíptica.


Comentarios