Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - pinalo

Páginas: [1]
1
Según Yo me quedo así  :(
Pero me da una excepción,
y lo peor es que es para hoy D:

Código: [Seleccionar]
/**
 * @author Luis Enrique Piña Juárez
 */

import java.io.*;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;
public class Vigenere {
   
    char [][]matriz=new char [26][26];
    String criptograma=null;
   
    /**
     * Metodo constructor
     * entrada:ninguna
     * salida:ninguna
     * descripcion:inicializa una matriz cuadrada de n X n donde n es la cantidad de letras
     * que estemos ocupando para nuestro alfabeto
     */
   
    public Vigenere(){
        int codigo=65;//valor de la A mayuscula
        int interno=0;
       
        //empezamos a llenar por renglones
        for(int i=0;i<26;i++){
            //con interno llenaremos los renglones y con codigo las columnas
            interno=codigo;
           
            //Nuestro alfabeto tendra  26 letras
            for(int j=0;j<26;j++){
                matriz[i][j]=(char)interno;
                interno++;
                //preguntamos si llegamos a la Z
                if(interno>90){
                    //SI es asi regresa y comienza de nuevo con A
                    interno=65;
                }
            }
           
            codigo++;
            //Preguntamos si llegamos a la Z
            if(codigo>90){
                //SI es asi regresa y comienza con la A
                codigo=65;
            }
        }
    }
   
    /**
     *Funcion quitaEspacios
     *entrada:una cadena de texto
     *salida:una cadena de texto
     *descripcion:Funcion que nos quita los espacios en blanco,se ingresa una cadena problema
     *que contiene espacios en blanco y devuelve una cadena problema sin espacios en blanco
     */
    String quitaEspacios(String problema){
        char []auxiliar=problema.toCharArray();
        problema="";
        for(int i=0;i<auxiliar.length;i++){
            if(auxiliar[i]!=' '){
                problema+=auxiliar[i];
                }
        }
        return problema;
    }
   
    /**
     * Funcion completa
     */
   
    public String completa(String faltante,int tamano){
        int diferencia=0,indice=0;
        if(faltante.length()!=tamano){
            //preguntamos si es menor la clave al mensaje
            if(faltante.length()<tamano){
                //Tenemos que acompletar
                //obtenemos la diferencia
                diferencia=tamano-faltante.length();
                while(diferencia!=0){
                    faltante+=faltante.charAt(indice);
                    //preguntamos si es el final de la cadena
                    if(indice==(faltante.length()-1)){
                        indice=-1;
                    }
                    indice++;
                    diferencia--;
                }
            }
            else{
                //Tenemos que acortar
                //obtenemos lo que nos sobra
                diferencia=faltante.length()-tamano;
                //cortamos la cadena
                faltante=faltante.substring(0, faltante.length()-diferencia);
            }
        }
        return faltante;
    }
   
    /**
     * Funcion getCaracter
     * entrada:dos argumentos,el primero de tipo char que representa la i-esima letra que
     * conforma el mensaje,el segundo representa la k-esima que conforma al clave
     * salida:un argumento de tipo char,que representa la interseccion entre las columnas
     * del mensaje y de la clave
     * descripcion:busca en las columnas el argumento mensaje y obtiene su posicion,busca en
     * los renglones el argumento clave y obtiene su posicion en base a eso identfica
     * el caracter y lo retorna
     */
   
    char getCaracter(char mensaje,char clave){
        //variables auxiliares
        int posicionMensaje=0,posicionClave=0,indice=0;
        boolean encontrado=false;
       
        //buscamos el caracter del mensaje en la columna del criptograma
        while(indice<26 && encontrado==false){
            if(matriz[0][indice]==mensaje){
                encontrado=true;
                posicionMensaje=indice;
            }
           
            indice++;
        }
        encontrado=false;
        indice=0;
        //buscamos el caracter en el renglon de las claves
        while(indice<26 && encontrado==false){
            if (matriz[indice][0]==clave){
                encontrado=true;
                posicionClave=indice;
            }
            indice++;
        }
        //Nos aseguramos que hayamos obtenido algun resultado
        return matriz[posicionClave][posicionMensaje];
    }
   
    /**
     * Metodo cifra
     * entrada:dos arguementso de tipo string,el primero contiene el mensaje a cifrar y el
     * segundo la clave que se usara
     * salida:una cadena que representa el criptograma
     * descripcion:Cifra una cadena usando la clave con el algoritmod de vigenere
     */
   
    public String cifra(String mensaje,String clave){
        criptograma=" ";
        //Quitamos espacios en blanco de la clave y del mensaje
        mensaje=quitaEspacios(mensaje);
        clave=quitaEspacios(clave);
       
        //Convertimos a mayusculas el mensaje y la clave
        mensaje=mensaje.toUpperCase();
        clave=clave.toUpperCase();
       
        //Completamos el tamano de la clave al tamano del mensaje
        clave=completa(clave,mensaje.length());
       
        //aplicamos el algoritmo de Vigenere
        for(int i=0;i<mensaje.length();i++){
            //Obtenemos el caracter segun la matriz de vigenere
            //que es la interseccion de la columna del mensaje y la columna
            //de las claves y la concatenamos con el criptograma
            criptograma+=getCaracter(mensaje.charAt(i),clave.charAt(i));
        }
       
       
        return criptograma;
    }//fin del metodo cifra
   
    /**
     * Funcion getCaracter
     * entrada:dos argumentos,el primero de tipo char que representa la i-esima letra que
     * conforma el mensaje,elsegundo representa la k-esima que conforma la clave
     * salida:un argumento de tipo char,que representa la interseccion entre las columnas
     * del mensaje y de la clave
     * descripcion:busca en las columnas el argumento mensaje y obtiene su posicion,busca en
     * los renglones el argumento clave y obtiene su posicion en base a eso identfica
     * el caracter y lo retorna
     */
   
    char getCaracterDescifrado(char cripto,char clave){
        //variables auxiliares
        int posicionMensaje=0,posicionClave=0,indice=0;
        boolean encontrado=false;
       
        //buscamos el caracter del mensaje en la columna del criptograma
        while(indice<26 && encontrado==false){
            if(matriz[0][indice]==clave){
                encontrado=true;
                posicionClave=indice;
            }
           
            indice++;
        }
        encontrado=false;
        indice=0;
        //buscamos el caracter en el renglon de las claves
        while(indice<26 && encontrado==false){
            if (matriz[indice][posicionClave]==cripto){
                encontrado=true;
                posicionMensaje=indice;
            }
            indice++;
        }
        //Nos aseguramos que hayamos obtenido algun resultado
        return matriz[0][posicionMensaje];
    }
   
    /**
     * Metodo descifra
     * entrada:dos arguementso de tipo string,el primero contiene el mensaje a cifrar y el
     * segundo la clave que se usara
     * salida:una cadena que representa el criptograma
     * descripcion:Cifra una cadena usando la clave con el algoritmod de vigenere
     */
   
    public String descifra(String mensaje,String clave){
        criptograma=" ";
        //Quitamos espacios en blanco de la clave y del mensaje
        mensaje=quitaEspacios(mensaje);
        clave=quitaEspacios(clave);
       
        //Convertimos a mayusculas el mensaje y la clave
        mensaje=mensaje.toUpperCase();
        clave=clave.toUpperCase();
       
        //Completamos el tamano de la clave al tamano del mensaje
        clave=completa(clave,mensaje.length());
       
        //aplicamos el algoritmo de Vigenere
        for(int i=0;i<mensaje.length();i++){
            //Obtenemos el caracter segun la matriz de vigenere
            //que es la interseccion de la columna del mensaje y la columna
            //de las claves y la concatenamos con el criptograma
            criptograma+=getCaracterDescifrado(mensaje.charAt(i),clave.charAt(i));
        }
       
       
        return criptograma;
    }//fin del metodo cifra
   
    /****************************************************/
   
    public static void main(String[] args)  throws IOException {
        // TODO Auto-generated method stub
       
        //try{
        int op;
        do{
            InputStreamReader teclado=new InputStreamReader(System.in);
            BufferedReader buffer=new BufferedReader(teclado);
            /**
             * Variables auxiliares para interactuar con el usuario
             **/
            String otro;
            String clave;
    BufferedReader lector= null;
    PrintWriter escritor= null;
           
           
            System.out.println("Elige una opcion");
            System.out.println("1:-cifrar");
            System.out.println("2:-descifrar");
           
            op=Integer.parseInt(buffer.readLine());
         
    switch(op){
                case 1:
                    System.out.println("Introduzca el nombre del archico que contenga el mensaje a cifrar: ");

    try{
lector= new BufferedReader(new FileReader (args[0]));
escritor= new PrintWriter(new FileWriter (args[1]));
while ((otro= lector.readLine ())!=null){
    escritor.println (otro);
}
    }
    finally{
if(lector!=null){
    lector.close();
}
if(escritor!=null){
    escritor.close();
}
    }
   
    /*mensaje_claro=buffer.readLine();
    mensaje_claro=mensaje_claro.trim();*/
                    System.out.println("Introduzca la llave: ");
                    clave=buffer.readLine();
                    Vigenere metodo=new Vigenere();
                    System.out.println("Criptograma:"+metodo.cifra(otro,clave));
                    break;

                case 2:
                    System.out.println("Introduzca el nombre del archivo que contine el criptograma");

    try{
lector= new BufferedReader(new FileReader (args[0]));
escritor= new PrintWriter(new FileWriter (args[1]));
while ((otro= lector.readLine ())!=null){
    escritor.println (otro);
}
    }
    finally{
if(lector!=null){
    lector.close();
}
if(escritor!=null){
    escritor.close();
}
    }
                    /*mensaje_claro=buffer.readLine();
      mensaje_claro=mensaje_claro.trim();*/
                    System.out.println("Introduzca la llave");
                    clave=buffer.readLine();
                   
                    // Instanciacion de la clase
                    Vigenere metodo1=new Vigenere ();
                   
                    System.out.println("Mensaje claro:"+metodo1.descifra(otro,clave));
                    break;

                default:
                    System.out.print("Seleccion incorrecta" );
                   
            }
        }while(op !=2);
    }
   
   
   
   
}

2
Hola que tal, un saludo, tengo un pequeño atasco, este es un proyecto de cifrado de Vigenere, el cual cifra y descifra, pero mi profesor quiere que también lea y escriba desde .txt, no se como podría incoorporarlo, me comento que con BufferReader y BufferWriter lo hacia, y al parecer en mi código con el import.java.io*  importe ya todo, pero no se como hacerle para que leea un archivo TXT, alguien podría ayudarme,
Grracias   :)

Este es el codigo completo !
Código: [Seleccionar]
/**
 * @author Luis Enrique Piña Juárez
 */

import java.io.*;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Vigenere {
   
    char [][]matriz=new char [26][26];
    String criptograma=null;
   
    /**
     * Metodo constructor
     * entrada:ninguna
     * salida:ninguna
     * descripcion:inicializa una matriz cuadrada de n X n donde n es la cantidad de letras
     * que estemos ocupando para nuestro alfabeto
     */
   
    public Vigenere()
    {
        int codigo=65;//valor de la A mayuscula
        int interno=0;
       
        //empezamos a llenar por renglones
        for(int i=0;i<26;i++)
        {
            //con interno llenaremos los renglones y con codigo las columnas
            interno=codigo;
           
            //Nuestro alfabeto tendra  26 letras
            for(int j=0;j<26;j++)
            {
                matriz[i][j]=(char)interno;
                interno++;
                //preguntamos si llegamos a la Z
                if(interno>90)
                {
                    //SI es asi regresa y comienza de nuevo con A
                    interno=65;
                }
            }
           
            codigo++;
            //Preguntamos si llegamos a la Z
            if(codigo>90)
            {
                //SI es asi regresa y comienza con la A
                codigo=65;
            }
        }
    }
   
    /**
     *Funcion quitaEspacios
     *entrada:una cadena de texto
     *salida:una cadena de texto
     *descripcion:Funcion que nos quita los espacios en blanco,se ingresa una cadena problema
     *que contiene espacios en blanco y devuelve una cadena problema sin espacios en blanco
     */
    String quitaEspacios(String problema)
    {
        char []auxiliar=problema.toCharArray();
        problema="";
        for(int i=0;i<auxiliar.length;i++)
        {
            if(auxiliar[i]!=' ')
            {
                problema+=auxiliar[i];
               
            }
        }
        return problema;
    }
   
    /**
     * Funcion completa
     */
   
    public String completa(String faltante,int tamano)
    {
        int diferencia=0,indice=0;
        if(faltante.length()!=tamano)
        {
            //preguntamos si es menor la clave al mensaje
            if(faltante.length()<tamano)
            {
                //Tenemos que acompletar
                //obtenemos la diferencia
                diferencia=tamano-faltante.length();
                while(diferencia!=0)
                {
                    faltante+=faltante.charAt(indice);
                    //preguntamos si es el final de la cadena
                    if(indice==(faltante.length()-1))
                    {
                        indice=-1;
                    }
                    indice++;
                    diferencia--;
                }
            }
            else
            {
                //Tenemos que acortar
                //obtenemos lo que nos sobra
                diferencia=faltante.length()-tamano;
                //cortamos la cadena
                faltante=faltante.substring(0, faltante.length()-diferencia);
            }
        }
        return faltante;
    }
   
    /**
     * Funcion getCaracter
     * entrada:dos argumentos,el primero de tipo char que representa la i-esima letra que
     * conforma el mensaje,el segundo representa la k-esima que conforma al clave
     * salida:un argumento de tipo char,que representa la interseccion entre las columnas
     * del mensaje y de la clave
     * descripcion:busca en las columnas el argumento mensaje y obtiene su posicion,busca en
     * los renglones el argumento clave y obtiene su posicion en base a eso identfica
     * el caracter y lo retorna
     */
   
    char getCaracter(char mensaje,char clave)
    {
        //variables auxiliares
        int posicionMensaje=0,posicionClave=0,indice=0;
        boolean encontrado=false;
       
        //buscamos el caracter del mensaje en la columna del criptograma
        while(indice<26 && encontrado==false)
        {
            if(matriz[0][indice]==mensaje)
            {
                encontrado=true;
                posicionMensaje=indice;
            }
           
            indice++;
        }
        encontrado=false;
        indice=0;
        //buscamos el caracter en el renglon de las claves
        while(indice<26 && encontrado==false)
        {
            if (matriz[indice][0]==clave)
            {
                encontrado=true;
                posicionClave=indice;
            }
            indice++;
        }
        //Nos aseguramos que hayamos obtenido algun resultado
        return matriz[posicionClave][posicionMensaje];
    }
   
    /**
     * Metodo cifra
     * entrada:dos arguementso de tipo string,el primero contiene el mensaje a cifrar y el
     * segundo la clave que se usara
     * salida:una cadena que representa el criptograma
     * descripcion:Cifra una cadena usando la clave con el algoritmod de vigenere
     */
   
    public String cifra(String mensaje,String clave)
    {
        criptograma=" ";
        //Quitamos espacios en blanco de la clave y del mensaje
        mensaje=quitaEspacios(mensaje);
        clave=quitaEspacios(clave);
       
        //Convertimos a mayusculas el mensaje y la clave
        mensaje=mensaje.toUpperCase();
        clave=clave.toUpperCase();
       
        //Completamos el tamano de la clave al tamano del mensaje
        clave=completa(clave,mensaje.length());
       
        //aplicamos el algoritmo de Vigenere
        for(int i=0;i<mensaje.length();i++)
        {
            //Obtenemos el caracter segun la matriz de vigenere
            //que es la interseccion de la columna del mensaje y la columna
            //de las claves y la concatenamos con el criptograma
            criptograma+=getCaracter(mensaje.charAt(i),clave.charAt(i));
        }
       
       
        return criptograma;
    }//fin del metodo cifra
   
    /**
     * Funcion getCaracter
     * entrada:dos argumentos,el primero de tipo char que representa la i-esima letra que
     * conforma el mensaje,elsegundo representa la k-esima que conforma la clave
     * salida:un argumento de tipo char,que representa la interseccion entre las columnas
     * del mensaje y de la clave
     * descripcion:busca en las columnas el argumento mensaje y obtiene su posicion,busca en
     * los renglones el argumento clave y obtiene su posicion en base a eso identfica
     * el caracter y lo retorna
     */
   
    char getCaracterDescifrado(char cripto,char clave)
    {
        //variables auxiliares
        int posicionMensaje=0,posicionClave=0,indice=0;
        boolean encontrado=false;
       
        //buscamos el caracter del mensaje en la columna del criptograma
        while(indice<26 && encontrado==false)
        {
            if(matriz[0][indice]==clave)
            {
                encontrado=true;
                posicionClave=indice;
            }
           
            indice++;
        }
        encontrado=false;
        indice=0;
        //buscamos el caracter en el renglon de las claves
        while(indice<26 && encontrado==false)
        {
            if (matriz[indice][posicionClave]==cripto)
            {
                encontrado=true;
                posicionMensaje=indice;
            }
            indice++;
        }
        //Nos aseguramos que hayamos obtenido algun resultado
        return matriz[0][posicionMensaje];
    }
   
    /**
     * Metodo descifra
     * entrada:dos arguementso de tipo string,el primero contiene el mensaje a cifrar y el
     * segundo la clave que se usara
     * salida:una cadena que representa el criptograma
     * descripcion:Cifra una cadena usando la clave con el algoritmod de vigenere
     */
   
    public String descifra(String mensaje,String clave){
        criptograma=" ";
        //Quitamos espacios en blanco de la clave y del mensaje
        mensaje=quitaEspacios(mensaje);
        clave=quitaEspacios(clave);
       
        //Convertimos a mayusculas el mensaje y la clave
        mensaje=mensaje.toUpperCase();
        clave=clave.toUpperCase();
       
        //Completamos el tamano de la clave al tamano del mensaje
        clave=completa(clave,mensaje.length());
       
        //aplicamos el algoritmo de Vigenere
        for(int i=0;i<mensaje.length();i++)
        {
            //Obtenemos el caracter segun la matriz de vigenere
            //que es la interseccion de la columna del mensaje y la columna
            //de las claves y la concatenamos con el criptograma
            criptograma+=getCaracterDescifrado(mensaje.charAt(i),clave.charAt(i));
        }
       
       
        return criptograma;
    }//fin del metodo cifra
   
    /****************************************************/
   
    public static void main(String[] args)  throws IOException {
        // TODO Auto-generated method stub
       
        //try{
        int op;
        do{
            InputStreamReader teclado=new InputStreamReader(System.in);
            BufferedReader buffer=new BufferedReader(teclado);
            /**
             * Variables auxiliares para interactuar con el usuario
             **/
            String mensaje_claro;
            String clave;
           
           
            System.out.println("Elige una opcion");
            System.out.println("1:-cifrar");
            System.out.println("2:-descifrar");
           
            op=Integer.parseInt(buffer.readLine());
            switch(op){
                case(1):
                    System.out.println("Introduzca el mensaje a cifrar: ");
                    mensaje_claro=buffer.readLine();
                    mensaje_claro=mensaje_claro.trim();
                    System.out.println("Introduzca la llave: ");
                    clave=buffer.readLine();
                    Vigenere metodo=new Vigenere();
                    System.out.println("criptograma:"+metodo.cifra(mensaje_claro,clave));
                    break;
                case 2:
                    System.out.println("Introduzca el criptograma");
                    mensaje_claro=buffer.readLine();
                    mensaje_claro=mensaje_claro.trim();
                    System.out.println("Introduzca la llave");
                    clave=buffer.readLine();
                   
                    // Instanciacion de la clase
                    Vigenere metodo1=new Vigenere ();
                   
                    System.out.println("Mcla:"+metodo1.descifra(mensaje_claro,clave));
                    break;
                default:
                    System.out.print("Seleccion incorrecta" );
                   
            }
        }while(op !=2);
    }
   
   
   
   
}

Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".