我的加密/解密项目有问题,这就是项目所要求的:
您刚刚被CIA聘为加密部门的程序员。你的工作是编写一个名为Crypto的类。一种方法,即encrypt,将接受表示要加密的句子的String。它将返回一个字符串,该字符串是所有v(大或小)替换为“ag',r”,所有m(大或小)替换为“ssad”,所有g(大或小)替换为“jeb .. w“和所有b(大或小)的”挖?/“。
该类包含另一个方法decrypt,它接受表示要解密的句子的String。在该方法中,执行上述相反的过程。它返回一个String,它是加密前的原始句子。
使用以下Tester类来确保您的方法有效。
我的测试员课程如下,我不相信这有任何问题:
//import java.io.*;
import java.util.*;
//import java.io.*;
//import java.util.*;
public class CryptoTester {
public static void main(String args[]) {
Scanner kbReader = new Scanner(System.in);
System.out.print("Enter a sentence that is to be encrypted:");
String sntnc = kbReader.nextLine();
System.out.println("Original Sentence = " + sntnc);
Crypto myCryptObj = new Crypto();
String encryptdSntnc = myCryptObj.encrypt(sntnc);
System.out.println("Encrypted sentence = " + encryptdSntnc);
String decryptdSntnc = myCryptObj.decrypt(encryptdSntnc);
System.out.println("Decrypted sentence = " + decryptdSntnc);
}
}
我的加密/解密类是我遇到一些重大问题的地方,它确实加密但不是正确的方式,它也没有解密:
class Crypto {
public String s;
public String acceptor(String sntnc) {
String s;
s = sntnc;
return null;
}
public String encrypt(String sntnc) {
sntnc = sntnc.replaceAll("V", "ag',r");
sntnc = sntnc.replaceAll("v", "ag',r");
sntnc = sntnc.replaceAll("M", "ssad");
sntnc = sntnc.replaceAll("m", "ssad");
sntnc = sntnc.replaceAll("G", "jeb..w");
sntnc = sntnc.replaceAll("g", "jeb..w");
sntnc = sntnc.replaceAll("B", "dug>?/");
sntnc = sntnc.replaceAll("b", "dug>?/");
return sntnc;
}
public String decrypt(String sntnc) {
s = sntnc.replaceAll("ag',r", "V");
s = sntnc.replaceAll("ag',r", "V");
s = sntnc.replaceAll("ssad", "M");
s = sntnc.replaceAll("ssad", "m");
s = sntnc.replaceAll("jeb..w", "g");
s = sntnc.replaceAll("jeb..w", "G");
s = sntnc.replaceAll("dug>?/", "B");
s = sntnc.replaceAll("dug>?/", "b");
return sntnc;
}
}
这是它在控制台中输出的内容:
Enter a sentence that is to be encrypted: this is a very big morning Original sentence: this is a very big morning Encrypted sentence: this is a ajedug>?/..w',rery dug>?..w ssadorninjedug>?/..w Decrypted sentence:this is a ajedug>?/..w',rery dug>?..w ssadorninjedug>?/..w
答案 0 :(得分:0)
首先,您不应该使用replaceAll()
。正如its documentation所示,该方法将正则表达式作为第一个参数,而不是文字子字符串。 replace()
做你想做的事。
其次,算法没有得到很好的描述,并且不可逆(因为没有办法知道,例如,dug>?/
最初是b
还是{{{ 1}})。
根据您对算法的解释,我们确定B
首先会被v
替换,然后替换此替换中包含的ag',r
g
。
因此,如果您想向后执行算法,则需要先按jeb..w
替换jeb..w
,然后将g
替换为ag',r
。