2016-02-15 2 views
0

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

Вот мой код:

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; 
    } 

} 

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

+0

проверка Таблица ASCII, значение буквального полукокса «а» и «А» различны. – ulab

ответ

1

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

if(Character.isLetter(c)){ 
    if(Character.isUpperCase(c)) 
     r += (char)('A' + (c - 'A' + secretKey) % 26); 
    else 
     r += (char)('a' + (c - 'a' + secretKey) % 26); 
Смежные вопросы