字符流:文件加密与文件解密

package Stream_test;

import java.io.*;

public class Stream_test_6 {

public static void main(String[] args) throws Exception {
    File f = new File("Stream_test_6/encodeFile.text");
    File enf = new File("Stream_test_6/encodedFile.text");
    File def = new File("Stream_test_6/decodedFile.text");

// 创建一个待加密文件
createFile(f,10);
// 创建一个加密容器
createFile(enf,0);
// 创建一个解密容器
createFile(def,0);
// 进行文件加密
encodeFile(f,enf);
// 进行文件解密
decodeFile(enf,def);

// 对比内容
char[] fc = new char[(int)f.length()];
FileReader fis =new FileReader(f);
fis.read(fc);
String fc1 = new String(fc);
fis.close();
char[] defc = new char[(int)def.length()];
FileReader fis2 =new FileReader(f);
fis2.read(defc);
String defc1 = new String(defc);
fis2.close();
System.out.printf(“未经加密的原文件内容为:%s%n解密后文件内容为:%s%n”,fc1,defc1);
System.out.println(“利用equals判断内容是否相同,结果为:”+fc1.equals(defc1));
}
// 文件解密
private static void decodeFile(File decodingFile,File decodedFile) {
try(FileReader fis = new FileReader(decodingFile)) {
int character = 0;
while ((character = fis.read()) > -1) {
try(FileWriter fus = new FileWriter(decodedFile,true)) {
// 0-8和字母a-y和字母A-Y
if ((character < 58 && character > 48)
|| (character < 123 && character > 97)
|| (character < 91 && character > 65)) {
character -= 1;
} else if (character == 48) {
// 0->9
character = 57;
} else if (character == 65) {
// A->Z
character = 90;
} else if (character == 97) {
// a->z
character = 122;
}
fus.write(character);
}
}
} catch (Exception e) {
e.getStackTrace();
}
}
// 文件加密
private static void encodeFile(File encodingFile,File encodedFile) {
try(FileReader fis = new FileReader(encodingFile)) {
int character = 0;
while ((character = fis.read()) > -1) {
try(FileWriter fus = new FileWriter(encodedFile,true)) {
// 0-8和字母a-y和字母A-Y
if ((character < 57 && character > 47)
|| (character < 122 && character > 96)
|| (character < 90 && character > 64)) {
character += 1;
} else if (character == 57) {
// 9->0
character = 48;
} else if (character == 90) {
// Z->A
character = 65;
} else if (character == 122) {
// z->a
character = 97;
}
fus.write(character);
}
}
} catch (Exception e) {
e.getStackTrace();
}
}
// 创建一个大小为length/1024 KB的由随机ACSII码字符组成的文件
private static void createFile(File file,int length) {
// 如果文件不存在则创建
if(!file.exists()) {
try {
file.getParentFile().mkdirs();
file.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
try(FileWriter fus = new FileWriter(file)) {
char[] randomASCII = new char[(int)length];
short start = ‘!’;
short end = ‘~’+1;
for(int i=0;i<length;i++) {
randomASCII[i] = (char)(Math.random()*(end-start)+start);
}
fus.write(randomASCII);
} catch (Exception e) {
e.getStackTrace();
}
System.out.printf(“成功创建文件(未加密):%s%n文件路径:%s%n文件大小:%,dKB%n”,file.getName(),file.getAbsoluteFile(),file.length());
}
}
缺点:性能不佳

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件解密是指将加密过的文件还原原始的文件。在Java中,可以使用文件字符IO来实现文件解密。 首先,需要使用FileReader类来读取加密文件中的字符流。然后,使用自定义的解密算法对字符流进行解密。最后,使用FileWriter类将解密后的字符流写入到新的文件中。 以下是一个简单的Java文件解密示例代码: ```java import java.io.*; public class FileDecryptor { public static void main(String[] args) { try { // 读取加密文件 FileReader fr = new FileReader("encrypted.txt"); BufferedReader br = new BufferedReader(fr); // 解密字符流 String line; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(decrypt(line)); } // 写入解密后的文件 FileWriter fw = new FileWriter("decrypted.txt"); BufferedWriter bw = new BufferedWriter(fw); bw.write(sb.toString()); // 关闭 br.close(); fr.close(); bw.close(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } // 自定义解密算法 private static String decrypt(String line) { // TODO: 实现解密算法 return line; } } ``` 在上面的代码中,我们使用了FileReader和FileWriter类来读写文件,使用BufferedReader和BufferedWriter类来提高读写效率。同时,我们也定义了一个decrypt方法来实现自定义的解密算法。在实际应用中,需要根据具体的加密算法来实现decrypt方法。 希望这个简单的示例能够帮助你理解Java文件解密的基本原理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值