用java写一个加密程序,对文件1txt进行加密。它从输入流中读入一个密钥,并将文件密文输出。采用下面的简单加密算法: 1)读入密钥的key是一个字符串; 2)明文中字符c的密文为c^key[i]; 3)循环使用key中的各个字符,直至处理完全部明文。如果key为空,则不作加密; 4)解密时,用同一个key重新加密密文,就可以得到明文。 【输入形式】 从标准输入流中读入一个密钥串,使用其对当前目录下的文件1txt进行加密。 【输出形式】 将文件密文输出到文件2txt 【输入样例】 输入密钥为: hello 1txt文件内容为: Alcatel provides end-to-end solutions. It enables enterprises to deliver content to any type of user. 【输出样例】 输出密文到2txt文件中。 【样例说明】 从标准输入中读入一个密钥对文件1txt加密,并将文件密文输出到2txt文件中。 提示:可将得到的密文文件2txt拷贝到1txt文件中,并用原密钥对该文件再次加密,若得到的密文文件与原始文件相同,则说明程序算法正确。
时间: 2024-02-09 20:09:27 浏览: 74
以下是Java代码实现:
```java
import java.io.*;
public class EncryptFile {
public void main(String[] args) {
// 从标准输入中读入一个密钥
System.out.print("输入密钥为:");
String key = null;
try {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
key = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
// 读取文件1.txt并加密,写入文件2.txt
try {
FileInputStream fis = new FileInputStream("1.txt");
FileOutputStream fos = new FileOutputStream("2.txt");
int len;
int i = 0;
while ((len = fis.read()) != -1) {
if (key.length() == 0) {
fos.write(len);
} else {
char c = (char) len;
fos.write(c ^ key.charAt(i));
i = (i + 1) % key.length();
}
}
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
解释一下代码:
首先从标准输入中读入一个密钥字符串,然后打开文件1.txt并读取其中的内容,逐个字符进行加密,然后将加密后的字符写入文件2.txt中。加密算法是将明文中的字符与密钥中的字符进行异或运算,如果密钥为空,则不作加密。
需要注意的是,因为加密算法是循环使用密钥中的各个字符,所以需要使用一个计数器i来记录当前使用的密钥字符的位置。
阅读全文