Blue Pelican Java第15课加密/解密

时间:2015-05-08 17:20:01

标签: java encryption

我的加密/解密项目有问题,这就是项目所要求的:

  

您刚刚被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

1 个答案:

答案 0 :(得分:0)

首先,您不应该使用replaceAll()。正如its documentation所示,该方法将正则表达式作为第一个参数,而不是文字子字符串。 replace()做你想做的事。

其次,算法没有得到很好的描述,并且不可逆(因为没有办法知道,例如,dug>?/最初是b还是{{{ 1}})。

根据您对算法的解释,我们确定B首先会被v替换,然后替换此替换中包含的ag',r g

因此,如果您想向后执行算法,则需要先按jeb..w替换jeb..w,然后将g替换为ag',r