Cifrado por sustitución – 1

22 10 2009

Hola parceros, bueno luego de terminar la solución del reto de yashira “Trial Version”, aqui expongo el código que use para tal reto. Adicional a esto pues me pareció muy interesante la forma de cifrar y descifrar datos =).

Si pueden observar el código tiene cositas adicionales, como un menú, lee un archivo “entrada.txt” y arroja una “salida.txt”. No siendo más ahora si vamos a la acción :) . He colocado algunos comentarios documentando el código, sin embargo creo que esta muy claro ;)

/****
 *  msg : /&4=91 5)?1= 5$35==14& 5$ {$1 31)31=1 45 ${5+ - )5$?9=m5 =5- 45 {$ 5)/139& 9$69$9?&
 *  @description : Reto para yashira
 *  @author       :  D-m-K
 ***/

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;

public class TrialRamon {
    //Miembros de clase

    static BufferedReader br;
    //Patron de cadenas para cifrar y descifrar
    public final static String str1 = "1234567890!#$%&/(=)?{¡@*-+";
    public final static String str2 = "abcdefghijklnñopqrstuvwxyz";
    public static File fe;
    public static boolean abierto;

    //Main :P
    public static void main(String[] args) throws IOException {
        //Instacio y defino los datos de entrada
        fe = new File("entrada.txt");
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        int op;
        do{
            System.out.println(" 1. Cifrar datos");
            System.out.println(" 2. Descifrar datos");
            System.out.println(" 3. Salir :P ");
            System.out.print("    Opcion >>");
            op = Integer.parseInt(entrada.readLine());
            //Evaluo la opcion ingresada
            switch(op){
                case 1:
                    Criptar();
                    break;
                case 2:
                    DesCriptar();
                    break;
                case 3:
                    System.out.println("Hasta luego!");
                    System.exit(0);
                    break;
            }
        }while(op != 3);
    }

    //Codifico los datos del fichero de entrada
    public static void Criptar() throws IOException {
        //Evaluo si el fichero pudo ser abierto
        if(fe.exists()){
            br = new BufferedReader(new FileReader(fe));
            abierto = true;
        }else{
			System.out.println("El archivo no existe");
		}
        if(abierto){
            //Creo el fichero de salida
            PrintWriter out = new PrintWriter(new FileWriter("salida.txt"));
            //Realizo el cifrado de los datos
            String linea = "";
            while ((linea = br.readLine()) != null) {
                System.out.println(linea);
                for (int i = 0; i < str1.length(); i++) {
                    linea = linea.toLowerCase();
                    linea = linea.replace(str2.charAt(i), str1.charAt(i));
                }
                System.out.println(linea);
                //Escribo la linea cifrada en el archivo
                out.println(linea);
            }
            //Aseguro los datos de salida y cierro los ficheros
            br.close();
            out.flush();
            out.close();
        }else{
            System.out.println("\n ERROR : El archivo no pudo ser abierto");
        }
        System.out.println("leyendo");
    }

    //Decodifica los datos del fichero de entrada
    public static void DesCriptar() throws IOException{
    //Evaluo si el fichero pudo ser abierto
        if(fe.exists()){
            br = new BufferedReader(new FileReader(fe));
            abierto = true;
        }else{
			System.out.println("El archivo no existe");
		}
        if(abierto){
            //Creo el fichero de salida
            PrintWriter out = new PrintWriter(new FileWriter("salida.txt"));
            //Realizo el cifrado de los datos
            String linea = "";
            while ((linea = br.readLine()) != null) {
                System.out.println(linea);
                for (int i = 0; i < str1.length(); i++) {
                    linea = linea.toLowerCase();
                    linea = linea.replace(str1.charAt(i), str2.charAt(i));
                }
                System.out.println(linea);
                //Escribo la linea cifrada en el archivo
                out.println(linea);
            }
            //Aseguro los datos de salida y cierro los ficheros
            br.close();
            out.flush();
            out.close();
        }else{
            System.out.println("\n ERROR : El archivo no pudo ser abierto");
        }
        System.out.println("leyendo");
    }
}

Hakuna Matata! Greetings to all and happy bandwidth.


Acciones

Información

Deja un comentario