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: Ficheros

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 – Modificar Ficheros de Propiedades en Tiempo de Ejecución


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

Nuevamente jugando con el ResourceBundle y los ficheros de propiedades, pero a diferencia del post realizado anteriormente respecto a este tema ahora no solo veremos como acceder a los datos del fichero de propiedades, si no también poder editarlos.

Esto es muy importante porque su uso no radicará solo en desarrollar aplicaciones multi-lenguaje, sino para poder generar ficheros de configuración donde podamos almacenar datos que cambian esporádica o frecuentemente, por ejemplo, los de acceso a base de datos, establecer un idioma, una apariencia, los items seleccionados en las preferencias de la aplicación, directorios donde se almacenarán registros, etc, es decir, información externa que no requiera almacenarse en una base de datos al estilo de un cache, por ello usaremos simples ficheros de propiedades.

En el ejemplo siguiente usaremos los ficheros de propiedades creados en el post  Código Java – Internacionalización de Aplicaciones con ResourceBundle, la mayor parte del código es el mismo excepto que esta vez no nos enfocamos a la internacionalización.

Este es el procedimiento necesario para poder realizar nuestro objetivo, donde:

fichero: Ubicación del fichero .properties.
key: Palabra Clave dentro del fichero .properties.
values: Nuevo valor que reemplazará al anterior.

...
    private void escribirProperties(String fichero, String key, String value)
    {
                // Crear el objeto archivo
		File archivo = new File(this.getClass().getResource(fichero).getFile().replace("%20", " "));
		//Crear el objeto properties

                System.out.println(archivo);

		Properties properties = new Properties();
		try {
			// Cargar las propiedades del archivo
			properties.load(new FileInputStream(archivo));
			properties.setProperty(key,value);
			// Escribier en el archivo los cambios
                        FileOutputStream fos=new FileOutputStream(archivo.toString().replace("\\", "/"));

                        properties.store(fos,null);

                } catch (FileNotFoundException e) {
			System.out.println(e.getMessage());
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
    }
...

Código de Ejemplo:

/**
*Modificamos el valor del Keyword: beastieux.gui.Ejm19_Internacionalizacion.lbl3
*Del fichero /beastieux/language/LANG_es_PE.properties", creado en el Post 19.
 */

package beastieux.gui;

import java.awt.GridLayout;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.ResourceBundle;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 *
 * @author beastieux
 */
public class Ejm23_EscribirFicheroProperties extends JFrame {

    JLabel lbl1;
    JLabel lbl2;
    JLabel lbl3;
    JTextField txt1;
    JTextField txt2;
    JTextField txt3;
    JComboBox cmb1;
    JButton btn1;

    public Ejm23_EscribirFicheroProperties()
    {

        lbl1=new JLabel();
        txt1=new JTextField();

        lbl2=new JLabel();
        txt2=new JTextField();

        lbl3=new JLabel();
        cmb1=new JComboBox();
        cmb1.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmb1ItemStateChanged(evt);
            }
        });

        cmb1.addItem("Español");

        txt3=new JTextField();

        btn1=new JButton("Cambiar Etiqueta 3");
        btn1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn1ActionPerformed(evt);
            }
        });

        this.add(lbl1);
        this.add(txt1);
        this.add(lbl2);
        this.add(txt2);
        this.add(lbl3);
        this.add(cmb1);
        this.add(btn1);
        this.add(txt3);
        this.setLayout(new GridLayout(4,2));
        this.setSize(500, 150);

        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }

    private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {
        ResourceBundle.clearCache();
        escribirProperties("/beastieux/language/LANG_es_PE.properties",
                           "beastieux.gui.Ejm19_Internacionalizacion.lbl3",
                           this.txt3.getText());

        setBundles("beastieux.language.LANG_es_PE");
    }

    private void cmb1ItemStateChanged(java.awt.event.ItemEvent evt) {

        switch(cmb1.getSelectedIndex())
        {
            case 1:setBundles("beastieux.language.LANG_es_PE"); break;
            default:setBundles("beastieux.language.LANG");
        }
    }

    private void setBundles(String propertyFile)
    {
            ResourceBundle rb = ResourceBundle.getBundle(propertyFile);

            String keyBundle="beastieux.gui.Ejm19_Internacionalizacion";

            this.setTitle(rb.getString(keyBundle + ".this"));
            this.lbl1.setText(rb.getString(keyBundle + ".lbl1"));
            this.lbl2.setText(rb.getString(keyBundle + ".lbl2"));
            this.lbl3.setText(rb.getString(keyBundle + ".lbl3"));

    }

    private void escribirProperties(String fichero, String key, String value)
    {
                // Crear el objeto archivo
		File archivo = new File(this.getClass().getResource(fichero).getFile().replace("%20", " "));
		//Crear el objeto properties

                System.out.println(archivo);

		Properties properties = new Properties();
		try {
			// Cargar las propiedades del archivo
			properties.load(new FileInputStream(archivo));
			properties.setProperty(key,value);
			// Escribier en el archivo los cambios
                        FileOutputStream fos=new FileOutputStream(archivo.toString().replace("\\", "/"));

                        properties.store(fos,null);

                } catch (FileNotFoundException e) {
			System.out.println(e.getMessage());
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
    }

        public static void main(String args[]) {
        Ejm23_EscribirFicheroProperties obj = new Ejm23_EscribirFicheroProperties();
        obj.setVisible(true);
    }
}

Código Java – Copiar Ficheros


Este es el Ejemplo #01 del Topic: Programación Gráfica en Java (Aunque este primer código no tenga aún nada que ver con la programación gráfica lo necesitaremos en algún momento), yo espero que sea el primero de una gran lista de códigos reutilizables en Java que estaré posteando en adelante. Aquí les dejo el código sobre como realizar copias de ficheros utilizando principalmente las librerias FileInputStream y FileOutputStream:

package beastieux.gui;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

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

    //Clase File como parámetros
    private void FileCopy(File f1,File f2)
    {
            FileCopy(f1.getPath().replace("%20", " "), f2.getPath().replace("%20", " "));

    }

    //Clase String como parámetros
    private void FileCopy(String source, String target){
        try {
            if ((source == null) || (target == null)) {
                return;

            }
            File fileSource = new File(source);
            if (!(fileSource.exists())) {
                return;
            }
            File fileTarget = new File(target);
            fileTarget.createNewFile();
            InputStream in = new FileInputStream(source);
            OutputStream out = new FileOutputStream(target);

            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
        } catch (IOException iOException) {
            System.out.println(iOException.getMessage());
        }
    }

    public static void main(String args[]) {
       String tsOrigen;
       String tsDestino;

       tsOrigen="/home/beastieux/imagen1.png";
       tsDestino="/home/beastieux/imagen2.png";

       Ejm01_CopiarFichero obj = new Ejm01_CopiarFichero();
       obj.FileCopy(tsOrigen, tsDestino);
    }
}

PostgreSQL: Especificación de Ficheros


Este es el Post #3 del Topic: Guía Práctica de PostgreSQL

El siguiente paso, después de instalar PostgreSQL es revisar lo que contiene los ficheros generados con la instalación de postgres. Es necesario ver los contenidos del directorio data, y entender como están organizados y que es lo que contiene cada uno de ellos.

  • PG_VERSION  – Archivo con la versión de PostgreSQL.
  • base – Directorio  con subdirectorios por cada base de datos.Guía PostgreSQL
  • global – Directorio  con subdirectorios para todo el cluster.
  • pg_clog – Directorio  con datos de transacciones.
  • pg_multixact – Directorio con datos de lockeos compartidos a nivel fila.
  • pg_subtrans – Directorio  con datos de subtransacciones.
  • pg_tblspc – Directorio con links a tablespaces.
  • pg_twophase – Directorio  con archivos de estado para transacciones preparadas.
  • pg_xlog – Directorio  con WAL logs .
  • postmaster.opts – Fichero  con opciones de arranque de postmaster utilizadas.
  • postmaster.pid –  Fichero de lock con el PID del postmaster y el ID de shared mem usado.

Cada tabla o índice esta almacenado en un archivo independiente, los nombres de archivos se pueden consultar en el catálogo.

A %d blogueros les gusta esto: