Ошибка шифрования со строчными буквами

Я собрал шифровальный код для своего класса информатики, и мое шифрование и дешифрование работает для заглавных букв, но не для строчных. Например, предполагается, что «Dog» шифруется до «Eph». Вместо этого я получаю «Ebt». «СОБАКА» отлично шифрует.

Вот мой код:

public class Cipher { 

    private int secretKey;

    public Cipher() { 
        secretKey = 1;
        String s = "A B C";

        String b = caesarEncrypt(s);
        String c = caesarDecrypt(b);

        System.out.println("Encrypted: " + b);
        System.out.println("Decrypted: " + c);
    }


    public String caesarEncrypt(String s) { 
        String r = "";
        for(int i = 0; i < s.length(); i++){ 

            char c = (char)(s.charAt(i));
            if(Character.isLetter(c)){
                if(Character.isUpperCase(c))
                    r += (char)('A' + (c + 'A' + secretKey) % 26);
                else
                    r += (char)('a' + (c + 'a' + secretKey) % 26);
            } else
                r += c;
        }  
        return r;
    }

    public String caesarDecrypt(String s) { 
        String r = "";
        for(int i = 0; i < s.length(); i++) { 
            char c = (char)(s.charAt(i));
            if(Character.isLetter(c)) { 
                if(Character.isUpperCase(c))
                    r += (char)('A' + (c - 'A' + (26 - secretKey)) % 26);
                else
                    r += (char)('a' + (c - 'a' + (26 - secretKey)) % 26);
            } else r+= c;
        }
        return r;
    }

}

Изменить: у форумов разные знаки + и -. Я оставлю код как есть, чтобы все были на одной странице. Извините.


person Zach H.    schedule 15.02.2016    source источник
comment
проверьте таблицу ascii, значения буквальных символов a и A различны.   -  person ulab    schedule 15.02.2016


Ответы (1)


Я обнаружил проблему в обоих алгоритмах шифрования в caesarEncrypt. Замените + после c на -

  if(Character.isLetter(c)){
     if(Character.isUpperCase(c))
         r += (char)('A' + (c - 'A' + secretKey) % 26);
     else
         r += (char)('a' + (c - 'a' + secretKey) % 26);
person Shakeel    schedule 15.02.2016