使用Java编写加密解密程序

3

我被要求编写一个加密程序,将文件中的每个字节都加5,然后再编写另一个程序来解密该文件。这是我编写的程序。但它不起作用。它成功地加密了文件,但无法将其恢复到原始状态。解密的结果只是一个带有一些奇怪符号的文件。

import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


public class CryptingFile 
{
    public static void main(String[] args)
    {               
        if(args.length != 3 || (args[2].compareTo("-en") != 0 && args[2].compareTo("-de") != 0))
        {
            System.out.println("Usage: sourceFile targetFile -<option>");
            System.out.println("<option>: ");
            System.out.println("    en :            encrypt");
            System.out.println("    de:             decrypt");
            System.exit(0);
        }

        try 
        {
            File fileInput = new File(args[0]);
            File fileOutput = new File(args[1]);

            FileInputStream input = new FileInputStream(fileInput);
            FileOutputStream output = new FileOutputStream(fileOutput);

            if(args[2] == "-en")
            {
                int value;

                while((value = input.read()) != -1)
                    output.write(value + 5);

            }
            else
            {
               int value;

               while((value =  input.read()) != -1)
                    output.write(value - 5);


            }


            input.close();
            output.close();


        } 
        catch (FileNotFoundException ex) 
        {
            System.out.println("Error " + args[0] + " not found");
        } catch (IOException ex) 
        {
            System.out.println("Error reading file");
        }


    }
}

这是一个结果,应该看起来像这样:

这是一个测试文件。

但它看起来像这样:

J^_i_iWj[ij_b[$


1
感谢您在问题中包含了代码。您能否创建一个非常小的输入文件,通过您的代码运行它,然后[编辑]您的帖子以添加输入和输出,以及您期望输出的样子以及为什么您认为它不正确? - shoover
谢谢你提醒我。我刚刚编辑了我的问题,但是后来我在Ashiquzzaman那里找到了答案,解决了我的问题。 - Minh Le
1个回答

2

替换

if(args[2] == "-en")

使用

if(args[2].equals("-en"))

因为

== 用于比较对象是否相同

.equals() 用于比较对象的值是否相同。


非常感谢。我刚从C++转到Java,在C++中,我们只需要使用==来比较两个字符串。我知道这一点,但有时会忘记。有时候这种差异会成为问题,并花费我数小时才能解决。 - Minh Le

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接