简单的文本加密解密

简单的文本加密解密

加密模块

准备一个文本文件(非二进制),其中包含ASCII码的字符和中文字符。
设计一个方法

public static void encodeFile(File encodingFile, File encodedFile);

在这个方法中把encodingFile的内容进行加密,然后保存到encodedFile文件中。

加密算法:
数字:
如果不是9的数字,在原来的基础上加1,比如5变成6, 3变成4
如果是9的数字,变成0

字母字符:
如果是非z字符,向右移动一个,比如d变成e, G变成H
如果是z,z->a, Z-A。
字符需要保留大小写

非字母字符:
比如’,&^ 保留不变,中文也保留不变

部分代码:

// 加密模块
	public static void encodeFile(File encodingFile, File encodedFile) {
		
		/*
			 加密 准备一个文本文件(非二进制),其中包含ASCII码的字符和中文字符。 设计一个方法
			 
			 public static void encodeFile(File encodingFile, File encodedFile);
			 
			 在这个方法中把encodingFile的内容进行加密,然后保存到encodedFile文件中。 
			 
			 加密算法:
			 数字: 如果不是9的数字,在原来的基础上加1,比如5变成6, 3变成4 如果是9的数字,变成0
			 字母字符: 如果是非z字符,向右移动一个,比如d变成e, G变成H 如果是z,z->a, Z-A。 字符需要保留大小写 非字母字符 比如',&^
			 保留不变,中文也保留不变 建议: 使用以前学习的练习题中的某个Java文件,比如循环练习,就有很多的字符和数字
		 */
		try (FileReader fr = new FileReader(encodingFile); FileWriter fw = new FileWriter(encodedFile)){
			
			char[] data = new char[(int)encodingFile.length()];
			fr.read(data);//读
			System.out.println("====加密前的内容");
			System.out.println(data);
			
			for (int i = 0; i < data.length; i++) {
				
				if (Character.isDigit(data[i])) {//如果是数字
					
					if(data[i] == '9') {
						data[i] = '0';
					} else {
						data[i] += 1;
					}
					
				} else if (Character.isLetter(data[i])) {//如果是字母,中文也算字母,加一个判断
					
					if(data[i] == 'z') {
						data[i] = 'a';
					} else if (data[i] == 'Z'){
						data[i] = 'A';
					} else if (data[i] >= 'a' && data[i] < 'z' || data[i] >= 'A' && data[i] < 'Z'){
						data[i] += 1;
					}
				}
			}
			
			
			System.out.println("====加密后的内容");
			System.out.println(data);
			
			fw.write(data);//写
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}

解密模块

解密在文件加密中生成的文件。
设计一个方法

public static void decodeFile(File decodingFile, File decodedFile);

在这个方法中把decodingFile的内容进行解密,然后保存到decodedFile文件中。
解密算法:
数字:
如果不是0的数字,在原来的基础上减1,比如6变成5, 4变成3
如果是0的数字,变成9
字母字符:
如果是非a字符,向左移动一个,比如e变成d, H变成G
如果是a,a->z, A-Z。
字符需要保留大小写
非字母字符:
比如’,&^ 保留不变,中文也保留不变

部分代码:

//解密模块
	public static void decodingFile(File encodingFile, File decodedFile) {//加密后,解密后
		
		/*
			解密在文件加密中生成的文件。
			设计一个方法
			 
			public static void decodeFile(File decodingFile, File decodedFile);
			 
			在这个方法中把decodingFile的内容进行解密,然后保存到decodedFile文件中。
			
			解密算法: 
			数字:
			如果不是0的数字,在原来的基础上减1,比如6变成5, 4变成3
			如果是0的数字,变成9
			字母字符:
			如果是非a字符,向左移动一个,比如e变成d, H变成G
			如果是a,a->z, A-Z。
			字符需要保留大小写
			非字母字符:
			比如',&^ 保留不变,中文也保留不变
		 */
		
		try (FileReader fr = new FileReader(encodingFile); FileWriter fw = new FileWriter(decodedFile)){
			//准备读写字符流
			
			char[] data = new char[(int)encodingFile.length()];
			fr.read(data);
			
			System.out.println("====源文件内容");
			System.out.println(data);
			
			for (int i = 0; i < data.length; i++) {
				
				if (Character.isLetter(data[i])) {//如果是字母
					
					if (data[i] == 'a') { 
						data[i] = 'z';
					} else if(data[i] == 'A') {
						data[i] = 'Z';
					} else {
						data[i] -= 1;
					}
					
					
				} else if(Character.isDigit(data[i])) {//如果是数字
					
					if (data[i] == '0') {
						data[i] = '9';
					} else {
						data[i] -= 1;
					}
				}
					
			}
			
			
			System.out.println("====解密后的内容");
			System.out.println(data);
			fw.write(data);
			
			
		} catch(IOException e) {
			e.printStackTrace();
		}
	}

【附】
以下是全部代码
(需要运行,需要创建一下必要的文件和文件夹)

package j2se;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class IOJiaMiJieMi {

	
	public static void main(String[] args) {
		
		//未加密文本为:
		//1 a 9 z Z ! @ # $ % ^ & * ( ) _ + | 中
		
		File encodingFile = new File("D:/LOL/LOL.txt");//未加密
		File encodedFile = new File("D:/LOL/LOL2.txt");//加密后
		File endFile = new File("D:/LOL/LOL3.txt");//解密后
		
		encodeFile(encodingFile, encodedFile);//加密过程
		System.out.println("--------------------------------------");
		decodingFile(encodedFile, endFile);//解密过程
		
		
	}

	// 加密模块
	public static void encodeFile(File encodingFile, File encodedFile) {
		
		/*
			 加密 准备一个文本文件(非二进制),其中包含ASCII码的字符和中文字符。 设计一个方法
			 
			 public static void encodeFile(File encodingFile, File encodedFile);
			 
			 在这个方法中把encodingFile的内容进行加密,然后保存到encodedFile文件中。 
			 
			 加密算法:
			 数字: 如果不是9的数字,在原来的基础上加1,比如5变成6, 3变成4 如果是9的数字,变成0
			 字母字符: 如果是非z字符,向右移动一个,比如d变成e, G变成H 如果是z,z->a, Z-A。 字符需要保留大小写 非字母字符 比如',&^
			 保留不变,中文也保留不变 建议: 使用以前学习的练习题中的某个Java文件,比如循环练习,就有很多的字符和数字
		 */
		try (FileReader fr = new FileReader(encodingFile); FileWriter fw = new FileWriter(encodedFile)){
			
			char[] data = new char[(int)encodingFile.length()];
			fr.read(data);//读
			System.out.println("====加密前的内容");
			System.out.println(data);
			
			for (int i = 0; i < data.length; i++) {
				
				if (Character.isDigit(data[i])) {//如果是数字
					
					if(data[i] == '9') {
						data[i] = '0';
					} else {
						data[i] += 1;
					}
					
				} else if (Character.isLetter(data[i])) {//如果是字母,中文也算字母,加一个判断
					
					if(data[i] == 'z') {
						data[i] = 'a';
					} else if (data[i] == 'Z'){
						data[i] = 'A';
					} else if (data[i] >= 'a' && data[i] < 'z' || data[i] >= 'A' && data[i] < 'Z'){
						data[i] += 1;
					}
				}
			}
			
			
			System.out.println("====加密后的内容");
			System.out.println(data);
			
			fw.write(data);//写
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}
	
	
	//解密模块
	public static void decodingFile(File encodingFile, File decodedFile) {//加密后,解密后
		
		/*
			解密在文件加密中生成的文件。
			设计一个方法
			 
			public static void decodeFile(File decodingFile, File decodedFile);
			 
			在这个方法中把decodingFile的内容进行解密,然后保存到decodedFile文件中。
			
			解密算法: 
			数字:
			如果不是0的数字,在原来的基础上减1,比如6变成5, 4变成3
			如果是0的数字,变成9
			字母字符:
			如果是非a字符,向左移动一个,比如e变成d, H变成G
			如果是a,a->z, A-Z。
			字符需要保留大小写
			非字母字符:
			比如',&^ 保留不变,中文也保留不变
		 */
		
		try (FileReader fr = new FileReader(encodingFile); FileWriter fw = new FileWriter(decodedFile)){
			//准备读写字符流
			
			char[] data = new char[(int)encodingFile.length()];
			fr.read(data);
			
			System.out.println("====源文件内容");
			System.out.println(data);
			
			for (int i = 0; i < data.length; i++) {
				
				if (Character.isLetter(data[i])) {//如果是字母
					
					if (data[i] == 'a') { 
						data[i] = 'z';
					} else if(data[i] == 'A') {
						data[i] = 'Z';
					} else {
						data[i] -= 1;
					}
					
					
				} else if(Character.isDigit(data[i])) {//如果是数字
					
					if (data[i] == '0') {
						data[i] = '9';
					} else {
						data[i] -= 1;
					}
				}
					
			}
			
			
			System.out.println("====解密后的内容");
			System.out.println(data);
			fw.write(data);
			
			
		} catch(IOException e) {
			e.printStackTrace();
		}
	}
}

最后,中文的乱码还是没有解决,有待完善!

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值