2015-09-26 4 views
0

Я делаю шифр Цезаря для моего вступления в класс информатики, и я застрял. Я уже выяснил, как удовлетворить некоторые из необходимых элементов для проекта, например, пробелы, и я работал, когда ключ шифрования был установлен с фиксированным номером. Однако одним из требований является то, что алфавит обертывается, когда вы нажимаете «z», и что пользователь может ввести собственное значение ключа шифрования. Также ему необходимо шифровать и расшифровывать сообщения. Любые советы, которые кто-либо может дать мне о том, куда я иду, будут оценены по достоинству! Вот то, что я до сих пор: (я делал это в Eclipse)Создание Caesar Cipher в Java

import java.util.Scanner; 

public class CaesarCipher { 
    public static void main(String[] args) { 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println("What is the message? (all lowercase)"); 
     String plainText = keyboard.nextLine(); 

     System.out.println("Please enter the encryption key: "); 
     int encryptionKey = keyboard.nextInt(); 

     System.out.println("The encrypted text is: "); 
     int charPos = 0; 

     while (charPos < plainText.length()) { 
      char currChar = plainText.charAt(charPos); 
      int charAsNum = (int) currChar; 
      int cipherLetterAsNum = charAsNum + encryptionKey; 
      char cipherLetter = (char) cipherLetterAsNum; 

      if (currChar == 'x' || currChar == 'y' || currChar == 'z') { 
       currChar = plainText.charAt(charPos); 
       charAsNum = (int) currChar; 
       cipherLetterAsNum = charAsNum + encryptionKey - 26; 
       cipherLetter = (char) cipherLetterAsNum; 
       System.out.print(cipherLetter); 
       charPos = charPos + 1; 
      } 

      if (currChar == ' ') { 
       System.out.print(currChar); 
      } else { 
       System.out.print(cipherLetter); 
      } 
      charPos = charPos + 1; 
     } 
    } 
} 
+0

a) Используйте входной символ, чтобы решить, нужно ли его изменять. b) Оператор '' ', чтобы решить, если вам нужно вычесть 26. Альтернативно вы можете использовать оператор'% ':' cOut = (cIn - 'a' + encryptionKey)% 26 + 'a'' – fabian

ответ

0

Я думаю, вы должны проверить encryptedChar ли больше 91 (значение ASCII от г), и если это так, он должен вычитать 26. Если вы хотите расшифровать текст, вам просто нужно вычесть encryptionKey, и если encryptedChar меньше 65 (значение ascii a), вы должны добавить 26. Я не уверен, что значения ascii верны, так что лучше посмотрите.