为什么我的凯撒密码加密在java返回符号

时间:2015-10-10 22:53:11

标签: java encryption caesar-cipher

我过去三天一直在尝试对此进行加密,结果就是所有符号。我不知道我的程序在哪里出错了,我必须在一天之内将其作为我的作业提交。在这方面迫切需要帮助。我的程序将输入作为文本文件,使用密钥对其进行加密,并将输出返回到另一个文本文件中。

import java.util.Scanner;
import java.io.FileReader;
import java.io.BufferedWriter;
import java.io.FileWriter;*/
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;
        String letters="";
        String output="";


        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();

            try{
            FileReader fileReader=new FileReader(textFile);
            BufferedReader bufferedReader=new BufferedReader(fileReader);

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

            while(( line=bufferedReader.readLine())!=null)
            { 

            char[] toEncrypt=line.toCharArray();

                for(int i=0;i<toEncrypt.length;i++)
                {
                    char alphabet=toEncrypt[i];
                    alphabet=(char) ((alphabet+keyvalue)%26);   
                    letters= String.valueOf(alphabet);  
                    output+=letters;

                }                                                   

        bufferedWriter.write(output);   
             bufferedWriter.newLine();
            }

            bufferedReader.close();                                                         


            //bufferedWriter.close();
            break;
            } catch (IOException e)
            { e.printStackTrace();} 


        case 2:


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



        default:

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

        }
    }
}

1 个答案:

答案 0 :(得分:1)

替换此行:

alphabet=(char) ((alphabet+keyvalue)%26); 

有了这个:

alphabet=(char) ((alphabet+keyvalue)%26 + 'a');  

您实际上是在使用ASCII字符表最底部的字符。添加a字符的值时,您将从字母表的开头重新开始。