MINI-CONCURSO Programación (java/visual basic)

Topic created · 74 Mensajes · 6573 Visitas
  • ¿Puedo contestar yo aunque ya lo haya hecho? 😛
    si el carácter mínimo es el 32 y el máximo es el 126, hay 126-32 claves (94) ya que despúes se repetirían. Se puede hacer por fuerza bruta y revisar a mano el código generado por cada clave, o se puede hacer de otra forma.
    Cada lenguaje tiene unas letras que más se repiten. En el español la letra que más se repite es la e, seguida de la a. Se puede presumir que la letra más repetida es la e y por tanto la clave será la diferencia entre la letra más repetida y la e. Si no se prueba con la a, y así sucesivamente.

  • Yo tengo una pregunta.

    EL numero 32 de la tabla esa a ASCII es '' Espacio '' con eso de espacio quiere decir , el espacio entre una palabra a otra? y otra pregunta. Haber si me explico xD solo hay un numero al que hay que sumar o mas de uno? Quiero decir, un caracter por ejemplo tines que sumar +3 y a otro +7 o todos +3.

    Lo de +3 es un ejemplo xDD

  • Lo primero, es un espacio que hay entre cada palabra, sí. 😄

    Lo de sumar es a clave, por ejemplo. La letra "F" la movemos a la clave 5. Sería 70 (F) + 5 = 75=K
    F, encriptado a la clave 5 es la K
    Creo que me habrás entendido xD

  • @Aguilaz said:

    Haber si me explico xD solo hay un numero al que hay que sumar o mas de uno? Quiero decir, un caracter por ejemplo tines que sumar +3 y a otro +7 o todos +3.

    Lo de +3 es un ejemplo xDD

    Se le suma a todos los caracteres de la frase la misma cifra, ya sea 3, 7 o la que sea, pero no a unos 3, a otros 4 y a otros 5, esa codificación no sería una codificación Cesar.

  • Gracias a los 2 xD tengo una pequeña idea de como sacarlo xD

  • bien, 94 posibles claves. Y sí, todas las letras se codifican con la misma clave. Si no, cómo lo decodificarías? Necesitarías guardar las claves correspondientes a cada letra en un archivo a parte para decodificar.

    Bueno, pues si son 94, la mejor forma es por fuerza bruta, se prueba a descifrar el mensaje con la clave 1, y a ver que sale, con la 2, etc. Así hasta q salga algo legible jeje.

    Pues bien, os vamos a dar un esqueleto de programa, tanto en java como en VB, para que hagáis la función que adivine por fuerza bruta la clave.

  • Os dejo el esqueleto del programa en java:
    [attachment=0]

    O quien prefiera copiar el código sin descargar los archivos:
    Tester.java //la clase principal, la que se ejecuta, o "main"

    public class Tester {
    
    	public static void main(String[] args) {
    		GUI interfaz = new GUI();
    	}
    
    }
    

    GUI.java //la encargada de la ventanita y su botón

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    
    
    public class GUI {
    	//Atributos de clase
    	public JFrame ventana;
    	
    	//Constructor de clase 
    	public GUI () {
    		ventana = new JFrame("Caesar Decoder");
    		ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		ventana.setSize(302,240);
    		ventana.setLayout(null);
    		ventana.setResizable(false);
    		final JTextArea textArea = new JTextArea();
    		textArea.setLineWrap(true);
    		JScrollPane scrollingResult = new JScrollPane(textArea);
    		scrollingResult.setBounds(1,1,300,150);
    		ventana.add(scrollingResult);
    		JButton boton = new JButton("Desencriptar");
    		boton.setBounds(1,155,120,45);
    		boton.addActionListener(new ActionListener()
    		{
    		  public void actionPerformed(ActionEvent e)
    		  {
    			  String texto = "";
    			  texto =	textArea.getText();
    			  Decode miCaesar = new Decode(texto);
    			  ventana.setVisible(false);
    			  miCaesar.decodificar();
    			  System.exit(0);
    		  }
    		});
    		ventana.add(boton);
    		ventana.setVisible(true);
    	}
    }
    

    Decode.java //la clase donde os va a tocar añadir unas líneas para que funcione el programa

    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.PrintWriter;
    
    public class Decode {
    	/* Atributos de clase */
    	public String texto; //aquí guardaremos el texto a encriptar/desencriptar
    	private PrintWriter fichero;
    
    	/* Constructor de clase */
    	public Decode(String text) {
    		/* Inicializamos atributos */
    		texto = text;
    		try {
    		    FileWriter fw = new FileWriter("resultados.txt");
    		    BufferedWriter bw = new BufferedWriter(fw);
    		    fichero = new PrintWriter(bw);
    		}
    		catch(java.io.IOException ioex) {
    		  System.out.println("se presento el error: "+ioex.toString());
    		}
    	}
    	
    	//Guarda un mensaje y un entero (clave) en el fichero resultados.txt
    	//Durante la ejecucion del programa, todo lo que se guarde queda añadido al fichero
    	//El archivo se borra siempre al empezar el programa
    	public void guardar (String escribir, int clave)
    	{
    		fichero.println("Clave: " + clave);
    		fichero.println(escribir);
    		fichero.println("- - - - - - - - - -");
    	}
    	
    	
    	public void decodificar ()
    	{
    		/* Aquí va vuestro código
    		 * Encontrad la clave por fuerza bruta
    		 *  - El texto a encriptar está en la variable text
    		 *  - Cada vez que probéis una clave, guardad el resultado en el fichero
    		 *    así: guardar(loquesea, clave);
    		 * */
    
    		
    		
    		//al acabar la función hay que cerrar el fichero. Si no cierras, a la mierda lo que guardaste
    		fichero.close();
    	}
    }
    

    hr

    Bien, de esas 3 clases o archivos java, no hace falta que entendáis el código, o cómo funciona. Nada, olvidad todo eso. Únicamente os tenéis que ocupar de darle contenido a la función: public void decodificar () que os he dejado vacía o casi vacía en el archivo Decode.java
    Esa función, se ejecuta cuando pinchas en el botón de "Sesencriptar". Pues bien, ahí hay que meter el código que consiga recorrer todo el texto y decodificarlo con las 94 claves posibles 😃
    Es sencillo, y por supuesto, todas las dudas, preguntadlas!!
    Por ejemplo "salva cómo se saca el caracter quinto de un texto?". O "cómo recorro todo el texto?", "cómo añado un caracter a una cadena?"

    Todas las dudas, preguntadlas. Y de VB a Kar Rak, que ahora pondrá el esqueleto, igual que éste, pero en VB.
    Suerte!

  • Bueno, pues aquí os dejo el esqueleto del programa pero en VB:

    [attachment=0]
    Los que lo uséis daré por hecho que sabeis algo de VB, simplemente extraeis, abris el .sln y a la derecha dais doble click en "Desencriptador.vb" y luego accedeis al codigo de la manera mas simple: doble click en el boton Desencriptar.

    Una vez ahí, os detallo todo con comentarios, todo el código está comentado, lo unico que teneis que hacer es rellenar correctamente la funcion encargada de descodificar.

    Cualquier duda referente al programa o a la sintaxis que debeis emplear que no os aclaréis, no dudéis en preguntarme

    Un saludo y suerte a todos!

    EDIT: Las soluciones en java mandadlas a Salva por privado, las de VB me las mandáis a mi y ya iremos haciendo una lista o algo con la gente que lo haya conseguido 😉 Ánimo y a por ello!

  • Joder, pero es que hay que probar entre más de 50 claves sumando y restando. No vamos a llegar nunca, manda huevos T_T

  • un ordenador encuentra la clave en menos de 1 segundo. No es coña, mi portatil en 1 segundo ha probado esas claves y 200 veces más xD
    solo son 94 tio!