破译不正常

时间:2012-05-17 15:25:51

标签: java java.util.scanner

我的解密程序运行不正常......

  public static void decipherMessage() { 

    Scanner sc = new Scanner(in);

    System.out.println("Enter keyword: "); 
    String decipher = sc.nextLine(); 

    String plain = ("abcdefghijklmnopqrstuvwxyz"); 
    String cipher = decipher + "abcdefghijklmnopqrstuvwxyz";

    System.out.println("Enter enciphered message: ");
    String ciphMsg = sc.nextLine(); 

    String decipherMessage = ciphMsg.toLowerCase();

    char[] chars = cipher.toCharArray();
    Set<Character> charSet = new LinkedHashSet<Character>(); 

    for (char c : chars) {
        charSet.add(c);
    }

    StringBuilder cMap = new StringBuilder();
    for (Character character : charSet) {
        cMap.append(character);
        StringBuilder original = cMap;

    }
    for (int i = 0; i < 26; i++)
    {
        char cipherTextChar = cMap.charAt(i);
        char plainTextChar = plain.charAt(i);

        decipherMessage = decipherMessage.replace(cipherTextChar,plainTextChar); 

        System.out.println("Deciphered message");  
        System.out.println(decipherMessage);


    }

纯文本字母应该替换加密字母

但是当我运行它时,它只是再次提供加密的消息而不进行解密?

例如

keyword: stack

plain : abcdefghijklmnopqrstuvwxyz

cipher: stackbdefghijlmnopqruvwxyz

message: overflow

ciphered message: mvhpbimw

除了相反。 使用我上面显示的代码,它只是再次提供加密的消息而不解密任何内容。

1 个答案:

答案 0 :(得分:0)

您的代码确实替换了字符,只是不正确(假设上面deciphMsgdecipherMessage的使用是拼写错误。它们应该是相同的变量。)

一个问题是,你一次只能替换一个 cypher 字符串。

例如,如果我的密码是“b”,它应该切换所有a和b,但如果我给它字符串

abababababab

首先它会用b给出

替换所有的a
bbbbbbbbbbbb

然后用's替换所有b:

aaaaaaaaaaaa

这不是预期的结果。

解决方案基本上归结为一次更换一个消息字符。你必须为此循环消息。您还可以使用地图来提高效率。