2015-10-06 58 views
1

我用java編寫了一個凱撒密碼的程序,程序將文本文件作爲輸入存儲在我的計算機中,並根據用戶提供的鍵值對其進行加密。然後這個加密文件必須以文本文件格式保存在計算機上。我一直在試圖找出我出錯的地方,但我想我需要一些來自java中更有經驗的人的幫助。因此,繼承人我的代碼:有缺陷的密碼凱撒java程序

import java.util.Scanner; 
import java.io.*; 
import java.lang.*; 

public class trial 
{ 
    public static void main(String arg[]) 
    { 
     String textFile="plaintext.txt"; 
     String cipheredFile=" ciphertext.txt"; 
     String line= null; 
     FileReader fileReader=new FileReader(textFile); 
     BufferedReader bufferedReader=new BufferedReader(fileReader); 

     FileWriter fileWriter= new FileWriter(cipheredFile,true); 
     BufferedWriter bufferedWriter= new BufferedWriter(fileWriter); 


     int swvalue; 
     Scanner input= new Scanner(System.in); 
     System.out.println("Select 1: Encrypt, 2: Decrypt, 3: Get Frequency"); 
     int msg= input.nextInt(); 
     swvalue= Integer.valueOf(msg); 

     switch(swvalue) 


     { 
     case 1: 
      System.out.println("Encrypting the file"); 
      System.out.println(" Please enter a value for key"); 
      int keyvalue= input.nextInt(); 

      String[] filearray=null; 
      while((line=bufferedReader.readLine())!=null) 
      { 

      char[] toEncrypt=line.toCharArray(); 

       for(int i=0;i<toEncrypt.length;i++) 
       { 

       int charPosition= indexOf(line.charAt(i)); 
       int finalValue=(keyValue+charPosition)%26; 
       char replaceValue=line.charAt(finalValue); 
       line+=replaceValue; 



       } 


      bufferedWriter.write(line); 
      bufferedWriter.newLine(); 

      } 
      bufferedReader.close(); 
      bufferedWriter.close(); 

      break; 


     case 2: 


      System.out.println("Decrypt the file"); 
      break; 



     case 3: 

      System.out.println(" Get frequency"); 
      break; 

     } 
    } 
} 
+0

是什麼讓你覺得它不工作? –

+0

我會開始整理代碼。刪除不必要的行,未使用或重複的變量等。這應該澄清很多。這個實現不是凱撒密碼,而是僞隨機地交換周圍的角色 – Paul

回答

0

這就是轉動應:

int charPosition= indexOf(line.charAt(i)); 
int finalValue=(keyValue+charPosition)%26; 

但這不轉動!

不是字符串中移位置的,你應該轉移

int value = line.charAt(i); 
int finalValue=(keyValue+value)%26;