Java: Cifrado Vigenere (solo encriptacion)

En el siguiente tutorial vemos como hacer un sencillo ejemplo del cifrado Vigenere, el cual implemente caracteres del codigo ascii de la “a” a la “z” en minusculas, correspondientes a los valores desde el 97 al 122 en el codigo ascii, incluyendo así las 26 letras minusculas del abecedario.
Videotutorial cifrado vigenere:

public class Vigenere {

	char[] mensaje;
	char[] clave;
	char[] resultado; //resultado cifrado
	char matriz[][];

	public Vigenere(String msg,String clave)
	{
		this.mensaje = msg.toCharArray();
		char[] claveTemp = clave.toCharArray();
		this.clave = new char[mensaje.length];
		int cont =0;
		for(int i=0;i<mensaje.length;i++)//For mete la clave multiples veces en 1 arreglo
		{
			this.clave[i]=claveTemp[cont];
			cont++;
			if(cont==claveTemp.length)
				cont=0;
		}
		//la clave ya se guardo en un arreglo de igual tamaño que del mensaje

		this.matriz = generarMatrizABC();//Generamos matriz del abecedarioç
		cifrar(); //ciframos el texto
	}

	public void cifrar() //Genera cifrado
	{
		char[] cifrado = new char[mensaje.length];
		int i;
		int j;
		for(int cont=0;cont<mensaje.length;cont++)
		{
			//Primero calculamos el indice de cada matriz "i" y "j"
			//el indice "i" correspondera al arreglo del mensaje
			//el indice "j" correspondera al arreglo de la clave 
			//luego ejecutaremos el calculo para cifrar utilizando "i" y "j" como cordenadas de la matriz
			i=(int)this.mensaje[cont]-97; //restamos 97 para pasar de codigo ascii a un numero entero
			j=(int)this.clave[cont]-97;
			cifrado[cont]=this.matriz[i][j];

		}

		this.resultado = cifrado;
		//for(int k = 0;k<26;k++)
		//	System.out.println(this.matriz[k]);

		System.out.println(this.mensaje);
		System.out.println(this.clave);
		System.out.println(cifrado);
	}

	public String getMensajeCifrado()
	{
		String result="";
		for(int i=0;i<resultado.length;++i)
			result=result+this.resultado[i];
		return result;
	}

	private char[][] generarMatrizABC()
	{
		int contador;
		char abcTemp[] = this.generarAbecedario();
		char abc[] = new char[abcTemp.length*2];
		for(int c=0;c<26;c++) {
			abc[c]=abcTemp[c];
			abc[c+26]=abcTemp[c];
		}
		char[][] matriz = new char[26][26];
		for(int i=0;i<26;i++)
		{
			contador=0;
			for(int j=0;j<26;j++)
			{
				matriz[i][j]=abc[contador+i];
				contador++;
			}
		}
		return matriz;
	}

	private char[] generarAbecedario()
	{
		char[] abc = new char[26];

		for(int i= 97; i<= 122;i++)
		{
			abc[i-97]=(char)i;

		}
		return abc;
	}

}

 

Acerca del autor:

Mi nombre es Jorge Villalobos, soy Colombiano de nacimiento y resido en México desde 2005,actualmente soy el creador de codigoprogramacion.com Soy ingeniero en tecnologías de información y comunicaciones y trabajo de tiempo completo desarrollando aplicaciones web. En general me considero un tipo normal, me gusta salir, divertirme, y uno de mis hobbies es programar y hacer tutoriales para compartir conocimiento, me gusta la pizza, el ajedrez y tomar una que otra cerveza los fines de semana. Espero que este proyecto ayude a ayudar a los demás.

Twitter del autor:

7 comments

  1. Pablito says:

    todo bien bestia

  2. ariel says:

    podria colocar encriptacion con el metodo curva eliptica

  3. jesus says:

    esta chido el video pero podrias hacer una encriptacion en arduino

  4. maria de la luz says:

    ola muy interesante tu tutorial solo quisiera saber como podre hacer un programa en java que solo pueda incriptar si me podrias explicar x favor

  5. Liseth H. says:

    ¡Muchas gracias! Tu ejemplo es fácil de comprender y aplica muy bien ese tipo de cifrado.

  6. Ivan says:

    Eres muy bueno, gracias por la ayuda que nos brindas a los que nos interesa la programación, sigue así, un ejemplo de programador a seguir ;)

  7. Aura Janeth Sanchez says:

    Muy interesante, tengo un poco mas claro el concepto.
    Pero necesito un código de encriptación con el metodo hash, no se si me podrías explicar como hacerlo.
    Mil gracias

Leave a Reply

Your email address will not be published. Required fields are marked *