Пример #1
0
        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));
        }
Пример #2
0
        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()));
        }