public static string Criptografar(string msg, int chave, int tam) { FilaCircular filaChave = new FilaCircular(); FilaCircular filaMensagem = new FilaCircular(); int[] vetorXored = new int[tam]; FilaCircular filaMsgCriptografada = new FilaCircular(); //Preencher a fila chave com as letras do alfabeto for (int i = 0, aux = 0; i < tam; i++, aux++) { if (aux > 25) { aux = 0; } filaChave.Adicionar((Char)(65 + aux)); } int giro = chave - 65; filaChave.Girar(giro); //Prencher a fila mensagem com a msg for (int i = 0; i < msg.Length; i++) { filaMensagem.Adicionar(msg[i]); } //Preencher o vetor Xored com o XOR das filas Mensagem e Chave for (int i = 0; i < tam; i++) { int letra = (int)filaChave.getNode(i) ^ (int)filaMensagem.getNode(i); vetorXored[i] = letra; } uint[] vetorXoredFib = new uint[tam]; for (int i = 0; i < tam; i++) { vetorXoredFib[i] = DecToFibFormat((uint)vetorXored[i]); } foreach (int i in vetorXoredFib) { filaMsgCriptografada.Adicionar((Char)i); } int[] result = new int[tam]; for (int i = 0; i < tam; i++) { result[i] = filaMsgCriptografada.getNode(i); } return(FormatarCifraSaida(result, msg.Length)); }
public static string Descriptografar(string msgCripto, int chave) { int[] msg = FormatarCifraEntrada(msgCripto); int tam = msg[msg.Length - 1]; FilaCircular filaChave = new FilaCircular(); FilaCircular filaMsgCriptografada = new FilaCircular(); int[] vetorXored = new int[tam]; int[] vetorDesXored = new int[tam]; //Preencher a fila chave com as letras do alfabeto for (int i = 0, aux = 0; i < msg.Length - 1; i++, aux++) { if (aux > 25) { aux = 0; } filaChave.Adicionar((Char)(65 + aux)); } int giro = chave - 65; filaChave.Girar(giro); //Voltar cada elemento da mensagem do formato Fibonacci para o formato Decimal for (int i = 0; i < tam; i++) { vetorXored[i] = (int)FibToDecFormat((uint)msg[i]); } //Fazer o Xor de cada elemento do vetor Xored com a fila chave para recuperar a letra original for (int i = 0; i < tam; i++) { int letra = (int)filaChave.getNode(i) ^ vetorXored[i]; vetorDesXored[i] = letra; } FilaCircular mensagemFinal = new FilaCircular(); foreach (int i in vetorDesXored) { mensagemFinal.Adicionar((char)i); } return(new string(mensagemFinal.Items())); }