Java 非常基本的加密文件

标签 java file io

我基本上想在java中解密一个文件。只需逐行读取文件,并将字符的值更改为“char += key”,其中 key 是整数。 问题是,如果我使用大于或等于 2 的 key ,它就不再起作用了。

public void encryptData(int key) {
    System.out.println("Encrypt");
    try {
        BufferedReader br = new BufferedReader(new FileReader("encrypted.data"));
        BufferedWriter out = new BufferedWriter(new FileWriter("temp_encrypted.data"));
        String str;
        while ((str = br.readLine()) != null) {
            char[] str_array = str.toCharArray();
            // Encrypt one line
            for (int i = 0; i < str.length(); i++) {
                str_array[i] += key;
            }
            // Put the line in temp file
            str = String.valueOf(str_array);
            out.write(str_array);
        }
        br.close();
        out.close();

    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

解密函数是相同的,但输入/输出文件互换,我不是添加 key 值,而是减去它。

我逐个字符地检查,确实,当我使用键值时, header 会变得困惑> 1. 有什么想法吗?是因为超出了字符的最大值吗?

最佳答案

您基本上是在实现通用凯撒密码。 向字符添加数字可能会将字符更改为换行符等,如果使用 BufferedReader 将其读回,则这将不起作用。

最好将文本作为字节流进行操作,这样可以正确编码和解码换行符和任何非 ASCII 字符。

public void encryptData(int key) {
    System.out.println("Encrypt");
    try {

        BufferedInputStream in = new BufferedInputStream(new FileInputStream("raw-text.data"));
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("temp_encrypted.data"));
        int ch;
        while((ch = in.read()) != -1) {
            // NOTE: write(int) method casts int to byte
            out.write(ch + key);
        }
        out.close();
        in.close();

    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

public void decryptData(int key) {
    System.out.println("Decrypt");
    try {
        BufferedInputStream in = new BufferedInputStream(new FileInputStream("temp_encrypted.data"));
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("decrypted.data"));
        int ch;
        while((ch = in.read()) != -1) {
                out.write(ch - key);
        }
        out.close();
        in.close();

    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

关于Java 非常基本的加密文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41078129/

相关文章:

java - 在java中断言两个具有有限属性的实例

java - 如何按索引对数组进行排序? (排序索引)

file - 如何运行 .lua 文件?

C++:如何使用cin和file两种方式获取输入?

java - 不关闭 BufferedWriter 的后果是什么

Java:字符串操作。获取 URL 中的最后一个子路径

java - 服务器错误消息的正确正则表达式

c# - 如何使用命令行参数中的文件路径在 C# 中打开访问数据库?

database - 将图像存储在数据库或文件系统中

go - 如何在stdout/stderr中显示命令输出,同时还将输出保存到Go中的变量中?