java - 如何使用我的解密类解密文本文件?
问题描述
我有一个需要使用以下代码解密的文本文件:
//Rot13加解密 public class Rot13 {
private char [] letter = {' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
private int index = 0;
public String encrypt(String s){
String str = "";
//forloop to get the each character from the passing string
for(int i=0; i<s.length(); i++){
char c = Character.toUpperCase(s.charAt(i));
if(c == ' '){
str += ' ';
}else {
//forloop to check the index of the character from array
for (int j = 1; j < letter.length; j++) {
if (letter[j] == c) {
index = j;
}
}
//shifting characters based on rot13
index = index % 26;
index = index + 13;
index = index % 26;
if (index == 0)
index = 26;
str += letter[index];
}
}
return str;
}//end encrypt
public String decrypt(String s){
String str = "";
//forloop to get the each character from the passing string
for(int i=0; i<s.length(); i++){
char c = Character.toUpperCase(s.charAt(i));
if(c == ' '){
str += ' ';
}else {
//forloop to check the index of the character from array
for (int j = 1; j < letter.length; j++) {
if (letter[j] == c) {
index = j;
}
}
//shifting characters based on rot13
index = index % 26;
index = index + 13;
index = index % 26;
if (index == 0)
index = 26;
str += letter[index];
}
}
return str;
}//end decrypt
}//结束类Rot13
我想解密使用 File 类制作的文件。
导入java.io.*;导入 java.util.Scanner;
公共类 FileExample 扩展 Rot13 {
public static void main(String [] args) {
try {
//create file object for input.txt
File in_file = new File("src/text.txt");
//create file object for output.txt
File out_file = new File("src/output.txt");
//read the input.txt file with Scanner
Scanner read = new Scanner(in_file);
//write the output.txt file with PrintWriter
PrintWriter w = new PrintWriter(out_file);
while(read.hasNextLine()){
w.write(read.nextLine());
}
while(read.hasNext()){
System.out.println(read.next());
}
//don't forget to close
w.close();
}
catch(Exception ex) {
ex.getStackTrace();
}
}
}
我不知道如何将带有加密消息的文本文件发送到解密类。谁能帮助我?
谢谢你。
解决方案
您的加密和解密方法需要一个字符串作为输入。
File.readAllBytes()
您可以使用该方法在一行中获取文件的全部内容。FileExample
extends Rot13
,但加密和解密方法不是静态的(静态方法通常是个坏主意)。
所以,要调用decrypt方法,首先需要创建一个实例FileExamples
,然后调用实例上的decrypt方法。实际上,最好将您的逻辑从 main 方法移动到一个非静态方法中,FileExample
并且只从 main 中移动所有该方法。
最后,您使用以下方法将解密后的内容写到String
您的输出文件中Files.write()
请看下面的代码:
public class FileExample extends Rot13 {
public void decryptFile(String inputFilePath, String outputFilePath){
try {
//Get the encrypted file contents as a String
String encryptedContents = new String(Files.readAllBytes(Paths.get(inputFilePath)));
//Call the decrypt method - inherited from Rot13
String decryptedContents = decrypt(encryptedContents);
//Write the decrypted content to the output file
Files.write(Paths.get(outputFilePath), decryptedContents.getBytes());
}
catch(Exception ex) {
ex.getStackTrace();
}
}
public static void main(String [] args) {
FileExample example = new FileExample();
example.decryptFile("src/text.txt", "src/output.txt");
}
}
推荐阅读
- unix - 使用 awk 函数的 HTML 条件编码
- javascript - 根据嵌套键值对对象数组进行排序的最快方法
- tensorflow - 在预测时,我们是否应该缩放模型的看不见的输入和未缩放的输出?
- python - 使用 networkx 和 matplotlib 对图形进行动画处理
- javascript - 未捕获的 DOMException:必须打开 XMLHttpRequest 状态
- python - 如何获得 MINIO 访问权限和密钥?
- postgresql - 恢复 Postgresql pgBarman
- spring - 无法在 Spring Batch 中将类型“java.lang.String”的属性值转换为所需类型
- python - Django 静态文件上传到无法找到的 Amazon S3 中的文件夹
- android - 找不到用于 Android 项目的 build.gradle