我正在研究关于数据加密和解密的学期项目。我已成功完成加密部分,逻辑上解密也应该很容易,而且很容易但我无法弄清楚如何在Java中完成它。因为我不是java.i的专家,有一个看起来像这样的字符串
cipher_string = "57 630 88 372 51 421 39 629 26 450 67 457 14 522 72 360 55 662 57 550 74 449 12 530 73 619 69 367 43 431 75 617 97 620 51 540 64 529";
上面的字符串实际上是纯文本的格式
user_plain_text = "hello this is bravo";
现在,如果你仔细看,你会发现cipher_string中的第一个数字是一个双图数字,那么第二个数字是一个3位数字然后是一个两位数字然后是3个数字,依此类推......
现在2位数字实际上是.txt文件的名称...即57.txt和88.txt以及51.txt等等。而3位数字实际上是文件内char的索引..现在我想以特定的顺序打开这些.txt文件,即打开57.txt文件然后转到索引630并将文件57.txt中的630处的char打印到用户然后再次打开文件88.txt并转到索引372并将文件88.txt中的372处的字符打印到用户等等......但我不知道如何在java中执行此操作...如果某些正文可以帮助我,即使在伪代码中也是如此。 (对不起我的英语不好)
答案 0 :(得分:1)
你需要使用split()拆分cipher_string(参见:http://www.tutorialspoint.com/java/java_string_split.htm),之后你可以在splitted数组上创建一个for循环。在for循环中,您可以执行以下操作:
BufferedReader reader = new BufferedReader(new FileReader(filePath));
reader.skip(n); // chars to skip
// .. and here you can start reading
答案 1 :(得分:0)
您必须拆分编码字符串,然后从文件中读取所需字符。查找下面的示例,虽然它没有注意正确的文件处理,也没有处理异常。
String[] cipher_split = cipher_string.split(" ");
FileReader in;
for (String s : cipher_split) {
if (s.length == 2) {
File f = new File(s + ".txt");
in = new FileReader(f);
} else if (s.length == 3) {
int i = 0;
int c;
while (i < Integer.parseInt(s)) {
c = in.read();
}
System.out.print((char) c);
in.close();
}
}
答案 2 :(得分:0)
您将要使用java.io.FileReader
:
import java.io.*;
//... get your first number, in a variable. Here I call it 'num', but use a more descriptive name.
File txt = new File(num+".txt");
FileReader fr = new FileReader(txt);
现在我们有了FileReader,我们可以使用the skip(long)
function直接转到我们想要的地方:
// Load the second number into 'm'
fr.skip(m);
decodedString += fr.read();
然后循环直到完成。