How to cite cesar

-2

When you paste (ABCDE) with offset 5 it encrypts (FGHIJ), when in fact it should be (EFGHI). I've tried everything I can not solve. In case he is doing the next offset to my input.

package cifracesar;

import java.util.Scanner;

public class Cifracesar {

public static String encriptar(int chave, String texto) {
    StringBuilder textoCifrado = new StringBuilder();
    int tamanhoTexto = texto.length();

    for (int c = 0; c < tamanhoTexto; c++) {
        int letraCifradaASCII = ((int) texto.charAt(c)) + chave;

        while (letraCifradaASCII > 126) {
            letraCifradaASCII -= 94;
        }

        textoCifrado.append((char) letraCifradaASCII);
    }

    return textoCifrado.toString();
}

public static String decriptar(int chave, String textoCifrado) {
    StringBuilder texto = new StringBuilder();
    int tamanhoTexto = textoCifrado.length();

    for (int c = 0; c < tamanhoTexto; c++) {
        int letraDecifradaASCII = ((int) textoCifrado.charAt(c)) - chave;

        while (letraDecifradaASCII < 32) {
            letraDecifradaASCII += 94;
        }

        texto.append((char) letraDecifradaASCII);
    }

    return texto.toString();
}

public static void main(String[] args) {

    try {
        Scanner entrada = new Scanner(System.in);

        System.out.println("*****************************************************");

        System.out.print("Informe o texto a ser criptografado: ");
        String texto = entrada.nextLine();
        System.out.print("Informe a chave de deslocamento: ");
        int chave = entrada.nextInt();

        String textoCriptografado = encriptar(chave, texto);
        String textoDescriptografado = decriptar(chave, textoCriptografado);

        System.out.println("\n\nTEXTO CRIPTOGRAFADO: " + textoCriptografado);
        System.out.println("TEXTO DESCRIPTOGRAFADO: " + textoDescriptografado);

        System.out.println("*****************************************************");

    } catch (RuntimeException e) {
        System.out.println("A chave de deslocamento foi informada incorretamente.");
        System.out.println("Execute o programa novamente e entre com uma chave valida.");
    }

}
}
    
asked by anonymous 12.09.2017 / 18:40

1 answer

3

You should assume that the indexes start at 0 instead of 1. Therefore, if the desired scroll key is 5, the number used to move the character should be 4. Change the following line of the method encriptar :

...
int letraCifradaASCII = ((int) texto.charAt(c)) + chave;
...

To:

...
int letraCifradaASCII = ((int) texto.charAt(c)) + (chave - 1);
...

And method decriptar :

...
int letraDecifradaASCII = ((int) textoCifrado.charAt(c)) - chave;
...

To:

...
int letraDecifradaASCII = ((int) textoCifrado.charAt(c)) - (chave - 1);
...
    
12.09.2017 / 18:51