The::Beastieux

Sangre de Bestia + Corazón de Pingüino | Un blog acerca de Linux, *BSD, Open Source, Software Libre, Programación …

Archivos por Etiqueta: Encriptación

Encriptación de Ficheros con GNU Privacy Guard – GPG


GNU Privacy Guard (GPG) es una herramienta de cifrado de datos y firmas digitales, usado como reemplazo de PGP (Pretty Good Privacy) pero con la diferencia que es software libre licenciado bajo la GPL. GPG utiliza el estándar del IETF denominado OpenPGP.

Utilizandolo correctamente, GPG puede proporcionar un gran nivel de seguridad y puede utilizarse para proteger datos almacenados en discos, copias de seguridad, etc.

Lo primero que necesitamos hacer es crear nuestra clave:

$ gpg --gen-key

gpg: AVISO: permisos inseguros del directorio contenedor del fichero de
configuración `~/.gnupg/gpg.conf’
gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Por favor seleccione tipo de clave deseado:

(1) DSA y ElGamal (por defecto)
(2) DSA (sólo firmar)
(5) RSA (sólo firmar)

Su elección: 1

El par de claves DSA tendrá 1024 bits.
las claves ELG-E pueden tener entre 1024 y 4096 bits de longitud.

¿De qué tamaño quiere la clave? (2048) 1024

El tamaño requerido es de 1024 bits
Por favor, especifique el período de validez de la clave.
0 = la clave nunca caduca
n> = la clave caduca en n días
n>w = la clave caduca en n semanas
n>m = la clave caduca en n meses
n>y = la clave caduca en n años

¿Validez de la clave (0)?

La clave nunca caduca

¿Es correcto? (s/n) s

Necesita un identificador de usuario para identificar su clave. El programa
construye el identificador a partir del Nombre Real, Comentario y Dirección
de Correo Electrónico de esta forma:
“Heinrich Heine (Der Dichter) “

Nombre y apellidos: Beastieux Zeroo
Dirección de correo electrónico: the.beastieux@gmail.com
Comentario: The::Beastieux
Ha seleccionado este ID de usuario: “Beastieux Zeroo (The::Beastieux)”
¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? V
Necesita una frase contraseña para proteger su clave secreta.******

gpg: comprobando base de datos de confianza
gpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias,
modelo de confianza PGP
gpg: nivel: 0 validez: 2 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 2u
pub 1024D/597280F0 2011-02-10
Huella de clave = FC3A 0A54 34AC C55F 6E5E E317 8869 8531 5972 80F0
uid Beastieux Zeroo (The::Beastieux) sub 1024g/438636E5 2011-02-10

Luego, podemos subirlo a algún servidor de claves para compartirlo:

$ gpg --keyserver pgp.mit.edu --send-keys mi_clave

Luego de subirlo pueden compartir su clave pública en la web:

Mi GPG

Algunos comandos que podemos hacer uso para realizar operaciones posterior a la creación de nuestra clave:

Listar Claves Públicas:

$ gpg --list-public-keys

Listar Claves Privadas:

$ gpg --list-secret-keys

Exportar Clave Pública:

$ gpg --export -a "Nombre de Usuario" > publica.key

Exportar Clave Privada:

$ gpg --export-secret-keys -a "Nombre Usuario" > privada.key

Importar Clave Pública:

$ gpg --import publica.key

Importar Clave Privada:

$ gpg --allow-secret-key-import --import privada.key

Borrar Clave Pública:

$ gpg --delete-key "Nombre Usuario"

Borrar Clave Privada:

$ gpg --delete-secret-key "Nombre Usuario"

Listar Huellas:

$ gpg --fingerprint

Cifrar Archivo:

$ gpg -e archivo

Descifrar Archivo:

$ gpg --decrypt archivo.gpg

Código Java – Función de Encriptación mediante MD5


Este es el Ejemplo #09 del Topic: Programación Gráfica en Java.

El tema de hoy tampoco trata específicamente de programación gráfica, pero en pleno desarrollo de un proyecto podría necesitarlo. Se trata de un mecanismo de encriptación no reversible aunque a lo largo de los años han sucedido una serie de ataques para pasar la barrera de seguridad que proponía. A pesar de que es un método de cifrado no reversible es muy sensible al ataque por colisiones, sin embargo puede ser usado aún por ejemplo para comprobar la integridad de un archivo descargado de esa manera evitamos obtener archivos dañados o corruptos alterados maliciosamente mediante su cheksum o como paso previo a la autentificación de un usuario al coincidir el hash.

Observemos la codificación en java de la función getMD5 que retorna un String hash:

...
    public String getMD5(String cadena) throws Exception {

        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] b = md.digest(cadena.getBytes());

        int size = b.length;
        StringBuilder h = new StringBuilder(size);
        for (int i = 0; i < size; i++) {

            int u = b[i] & 255;

            if (u < 16)
            {
                h.append("0").append(Integer.toHexString(u));
            }
            else
            {
                h.append(Integer.toHexString(u));
            }
        }
        return h.toString();
    }
...

Código de Ejemplo:

package beastieux.gui;

import java.security.MessageDigest;
import javax.swing.JOptionPane;

/**
 *
 * @author beastieux
 */
public class Ejm09_EncriptacionMD5 {

    public String getMD5(String cadena) throws Exception {

        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] b = md.digest(cadena.getBytes());

        int size = b.length;
        StringBuilder h = new StringBuilder(size);
        for (int i = 0; i < size; i++) {

            int u = b[i] & 255;

            if (u < 16)
            {
                h.append("0").append(Integer.toHexString(u));
            }
            else
            {
                h.append(Integer.toHexString(u));
            }
        }
        return h.toString();
    }

    public static void main(String args[]) {
        Ejm09_EncriptacionMD5 obj = new Ejm09_EncriptacionMD5();

        try {
            JOptionPane.showMessageDialog(null, obj.getMD5("palabrasecreta"));
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

    }

}
A %d blogueros les gusta esto: