0

我目前正在编写一个加密程序,用 64 位加密对文本文档进行加密。它的工作方式是接受一个字符串,并加密该字符串。我目前正在寻找一种方法让程序将文件的所有内容存储在字符串中,加密字符串,然后用加密的字符串覆盖文件。但是,使用

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

它只读取和加密第一行,其余部分保持不变。

但是,使用:

            List<String> lines = Files.readAllLines(Paths.get(selectedFile.toString()),
                Charset.defaultCharset());
        for (String line : lines) {
        ...
        }

只有最后一行被加密。老实说,我不知道该做什么了,因为我有点没有想法了。

这是我当前的代码(它也只附加到文件中,因为我正在尝试新的东西。):

    public static void Encrypt() throws Exception {

    try {

        FileWriter fw = new FileWriter(selectedFile.getAbsoluteFile(), true);
        BufferedWriter bw = new BufferedWriter(fw);

        List<String> lines = Files.readAllLines(Paths.get(selectedFile.toString()),
                Charset.defaultCharset());
        for (String line : lines) {
            System.out.println(line);
            System.out.println(AESencrp.encrypt(line));
            bw.write(AESencrp.encrypt(line));
        }

        bw.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}
4

3 回答 3

2

BufferedReader#readLine将返回从阅读器读取的文本行。在您的示例中,您忽略了返回值。

相反,你应该做类似...

String text = null;
while((text = bufferedReader.readLine()) != null) {
    // Process the text variable
}
于 2013-06-22T00:23:52.857 回答
1

我不认为逐行加密是一个好主意。我会这样做

Cipher cipher = ...
Path path = Paths.get(file);
File tmp = File.createTempFile("tmp", "");
try (CipherOutputStream cout = new CipherOutputStream(new FileOutputStream(tmp), cipher)) {
    Files.copy(path, cout);
}
Files.move(tmp.toPath(), path, StandardCopyOption.REPLACE_EXISTING);

并像这样阅读加密文本

Scanner sc = new Scanner(new CipherInputStream(new FileInputStream(file), cipher));
while(sc.hasNextLine()) {
    ...
于 2013-06-22T01:33:32.547 回答
0

尝试下一个:

public static void Encrypt() throws Exception {
    try {
        Path path = Paths.get(selectedFile.toURI());
        Charset charset = Charset.defaultCharset();

        // Read file
        List<String> lines = Files.readAllLines(path, charset);

        // Encrypt line
        lines.set(0, AESencrp.encrypt(lines.get(0)));

        // Write file
        Files.write(path, lines, charset);

    } catch (IOException e) {
        e.printStackTrace();
    }
}
于 2013-06-22T00:33:15.190 回答