[quote=marcuss]Boa noite pra todos.
Suponhamos que o cara digite “MATEMATICA” e “BRASIL” como chave , o programa tem que criptogrfar a palavra ‘‘matematica’’ de acordo com a chave ‘‘Brasil’’ de acordo com o codigo de Vigenere.
B R A S I L B R A S
M A T E M A T I C A
MENSAGEM CRIPTOGRAFADA: NRTWULUZCS = matematica.
[/quote]
Vamos lá…vou tentar ajudar…
1 - Crie o quadrado de Vigenère com um array de chars. Aqui vc pode criar o quadro de forma “mais inteligente” utilizando loops varrendo os caracteres A-Z e deslocando os caracteres para cada linha
.
char[][] quadradoVigenere = new char[26][];
quadradoVigenere[0] = new char[] {'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'};
quadradoVigenere[1] = new char[] {'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','A'};
quadradoVigenere[2] = new char[] {'C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B'};
quadradoVigenere[3] = new char[] {'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C'};
quadradoVigenere[4] = new char[] {'E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D'};
.......
quadradoVigenere[25] = new char[] {'Z','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'};
2- Para cada letra da palavra a ser criptografada localize o alfabeto que será utilizado para cifrar cada letra.
palavra - chave - alfabeto
M - B - 1 (indice do array)
A - R - 17
T - A - 0
E - S - …
M - I
A - L
T - B
I - R
C - A
A - S
Código abaixo criptografa utilizando o quadro.
char [] palavra = "MATEMATICA".toCharArray();
char [] chave = "BRASILBRAS".toCharArray();
char [] palavraCript = new char[palavra.length];
for(int c = 0; c<chave.length; c++) {
for(int i=0; i<quadradoVigenere.length; i++) {
if(quadradoVigenere[i][0] == chave[c]) {
System.out.println("Alfabeto utilizado para criptografar letra -> " +i);
palavraCript[c] = quadradoVigenere[i][((int)palavra[c]-65)]; //65 é o código da letra 'A' (ou seja letra 'A' é indice 0 (65 -65))
}
}
}
System.out.println("Palavra criptografada: " + String.valueOf(palavraCript));
Fica para vc a decriptografia, que é bem parecido com a criptografia, basta vc localizar o alfabeto utilizado para criptografar (com a chave), localizar o indice da letra (da palavra criptografada) neste alfabeto e obtenha a letra da palavra original no alfabeto normal (de indice ZERO).
Falow