viernes, 5 de octubre de 2012

Cayo Julio César




En criptografía, el cifrado César, también conocido como cifrado por desplazamiento, código de César o desplazamiento de César, es una de las técnicas de codificación más simples y más usadas. Es un tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, con un desplazamiento de 3, la A sería sustituida por la D (situada 3 lugares a la derecha de la A ), la B sería reemplazada por la E, etc. Este método debe su nombre a Julio César, que lo usaba para comunicarse con sus generales.
El cifrado César muchas veces puede formar parte de sistemas más complejos de codificación, como el cifrado Vigenère, e incluso tiene aplicación en el sistema ROT13. Como todos los cifrados de sustitución alfabética simple, el cifrado César se descifra con facilidad y en la práctica no ofrece mucha seguridad en la comunicación.


Algoritmo en java para "descifrar" Criptografia Cesar:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Cripto;

/**
 *
 * @author ahmateu
 */
public class JulioCesar {

    static final String[] abc = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
        "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
        "u", "v", "w", "x", "y", "z"};
 
    static String[] cesar = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
        "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
        "u", "v", "w", "x", "y", "z"};
 
    public static void main(String[] args) {
        String buscar = "ufwtzczxl";

//        String buscar = "ubyn";
        System.out.println("Buscando:: "+buscar);
        System.out.println("");
        for (int i = 1; i < abc.length; i++) {
            cesar = invertir(cesar, i);
            traducir(buscar, cesar);          
        }

    }

    public static String[] invertir(String[] a, int pos) {

        String s[] = a;
        String prim = a[0];

        for (int i = 1; i < a.length; i++) {
            s[i-1] = a[i];
        }
            s[s.length-1] = prim;
         
        return s;
    }

    private static void traducir(String buscar, String[] rever) {
        System.out.print("\nDiccionario:\n");
        for (int i = 0; i < rever.length; i++)
            System.out.print(rever[i]);
        System.out.println("");
     
        for (int i = 0; i < abc.length; i++)
            System.out.print(abc[i]);      
        System.out.println("");
     
        System.out.print("\nCifrado:"+"\n"+buscar);
        System.out.print(" = ");
     
        for (int j = 0; j < buscar.length(); j++) {
            for (int i = 0; i < rever.length; i++) {
                if(buscar.substring(j, j+1).equals(rever[i])){
                    System.out.print(abc[i]);
                    continue;
                }              
            }
        }
        System.out.println("\n");
    } 
}

No hay comentarios:

Publicar un comentario en la entrada