java - 如何在 java 中读取/写入异或 txt 文件 UTF8?

标签 java

到目前为止我做了什么:

我读取了一个带有文本的文件 1,用一个 key 对字节进行异或运算,然后将其写回另一个文件 2。 我的问题:我从 file1 读取了例如 'H',字节值为 72;

72 异或 -32 = -88 现在我将 -88 写入 file2。 当我读取 file2 时,我应该得到 -88 作为第一个字节,但我得到 -3。

public byte[] readInput(String File) throws IOException {

    Path path = Paths.get(File);
    byte[] data = Files.readAllBytes(path);
    byte[]x=new byte[data.length ];

    FileInputStream fis = new FileInputStream(File);
    InputStreamReader isr = new InputStreamReader(fis);//utf8
    Reader in = new BufferedReader(isr);
    int ch;
    int s = 0;
    while ((ch = in.read()) > -1) {// read till EOF
        x[s] = (byte) (ch);
    }
    in.close();

    return x;


}




public void writeOutput(byte encrypted [],String file) {
    try {

        FileOutputStream fos = new FileOutputStream(file);
        Writer out = new OutputStreamWriter(fos,"UTF-8");//utf8

        String s = new String(encrypted, "UTF-8");

        out.write(s);
        out.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}



 public byte[]DNcryption(byte[]key,byte[] mssg){

    if(mssg.length==key.length)
    {
        byte[] encryptedBytes= new byte[key.length];

        for(int i=0;i<key.length;i++)
        {
            encryptedBytes[i]=Byte.valueOf((byte)(mssg[i]^key[i]));//XOR

        }
        return encryptedBytes;
    }
    else
    {
        return null;
    }

}   

最佳答案

您不是按字节读取文件 - 您是按字符读取文件。加密数据不是有效的 UTF-8 编码文本,因此您不应尝试这样阅读它。

同样,您不应该编写任意字节数组,就好像它们是 UTF-8 编码的文本一样。

基本上,您的方法具有接受或返回任意二进制数据的签名 - 根本不要使用 WriterReader。只需将数据直接写入流即可。 (也不要吞下异常 - 如果您未能写入重要数据,您真的要继续吗?)

我实际上会完全删除您的 readInputwriteOutput 方法。相反,使用 Files.readAllBytesFiles.write .

关于java - 如何在 java 中读取/写入异或 txt 文件 UTF8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35311481/

相关文章:

java - 在 SpringFrame 工作中进行日志记录的首选方式

java - eclipse 未找到 JRE

java - p :inputText in p:dialog return empty values to bean

Java使用Annotation创建类的实例

java - 在 Java 中的两个 ArrayLists 之间交换部分的最快方法

java - 如何更改 JScrollPane 内容的颜色?

java - 没有在 JPA 中创建连接表?

java - 无法在拦截器中正确读取请求正文 - Spring BOOT 2.0.4

java - 继承中的向下转型

java - 无法使用 Java 从远程存储库删除克隆本地文件夹