Códigos de encriptación

--Originally published at Héctor H.F. Blog

Hace algunas semanas, les quedé a deber códigos para encriptar (ambos en Java). Puede ser desde una palabra hasta un texto entero. Si no han leído mi entrada sobre la encriptación, deberían leerla antes de tratar de averiguar cómo funcionan los siguientes códigos.

Son dos encriptaciones, César (muy simple) y Vigenere (un poco más avanzada).

El cifrado César consiste en mover cada letra de un texto posiciones. El número de posiciones lo define el usuario. El siguiente código demuestra el funcionamiento de este cifrado, y ya lleva incluido una serie de caracteres que, al encriptarla, te dará un mensaje real.

public class Caesar {

	public String encrypt(int key, String plaintext){
		String finalText = "";
		int[] ascii = new int[plaintext.length()];
		int[] asciiEncrypted = new int[plaintext.length()];
		for(int i = 0; i < plaintext.length(); i++){
			ascii[i] = (int) plaintext.charAt(i);
		}
		for(int i = 0; i < ascii.length; i++){ 			asciiEncrypted [i] = ascii[i] + key; 			if(asciiEncrypted[i] > 122) {
				asciiEncrypted[i] = ascii[i] - (26 - key);
			}
		}
		for(int i = 0; i < asciiEncrypted.length; i++) {
			finalText = finalText + (char) asciiEncrypted[i];
		}
		return finalText;
	}
	
	public static void main(String[] args) {
		caesar c = new caesar();
		System.out.println(c.encrypt(12, "sbgsñofbcsghfobgtsfwfqcbcqwawsbhcgwbcqfsofzogdcgwpwzwrorsgdofogi dfcdwodfcriqqwóbcqcbghfiqqwób"));
	}

}

El cifrado Vigenere es una versión mejorada del César. Este se construye de varios cifrados César en distintas partes del mensaje. Más detalles aquí http://es.ccm.net/contents/143-el-cifrado-vigenere. Esta página explica muy bien el paso a paso de este cifrado http://es.wikihow.com/codificar-y-decodificar-utilizando-la-cifra-de-Vigen%C3%A8re. Este código hace algo parecido (obtenido de http://javaenaccion.blogspot.mx/2012/05/cifrador-y-descifrador-del-metodo_28.html)

public class Vigenere {
 
    char tablaCesar[] = {
        '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 char getTextoCifrado(char parTextoClaro, char parTextoClave) {
        int 
= 0; int indiceY = 0; for (int i = 0; i < tablaCesar.length; i++) { if (parTextoClaro == tablaCesar[i]) { indiceX = i; break; } } for (int j = 0; j < tablaCesar.length; j++) { if (parTextoClave == tablaCesar[j]) { indiceY = j; break; } } return tablaCesar[(indiceX + indiceY) % 26]; } }

Espero que ahora sí el tema de encriptación haya quedado bien entendido. Si todavía no, los invito a que lean mi post de encriptación o que pregunten directamente aquí lo que gusten. Hasta pronto.

Héctor H.F.