0

我的解密程序无法正常工作...

  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

除非反过来。使用我在上面显示的代码,它只是再次给出加密消息,而不解密任何内容。

4

1 回答 1

0

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

一个问题是您一次要替换一个密码字符。

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

abababababab

首先它将用 b 的捐赠替换所有的 a

bbbbbbbbbbbb

然后用a替换所有b:

aaaaaaaaaaaa

这不是预期的结果。

该解决方案基本上归结为一次替换一个消息字符。为此,您必须遍历该消息。您还可以使用地图来提高效率。

于 2012-05-17T15:56:00.130 回答