Java Vigenere 密码

Posted

技术标签:

【中文标题】Java Vigenere 密码【英文标题】:Java Vigenere Cipher 【发布时间】:2018-11-29 15:16:23 【问题描述】:

我正在尝试破译 Vigenere_Cipher 当我输入BEXR TKGKTRQFARI 时,输出为JAVAPROGRAMMING 但我想要 像JAVA PROGRAMMING这样放置空间。

我的代码

public static String VigenereDecipher(String text) 
    String keyword = "SECRET";
    String decipheredText = "";
    text = text.toUpperCase();
    for (int i = 0, j = 0; i < text.length(); i++) 
        char c = text.charAt(i);
        if (c < 'A' || c > 'Z') continue;
        decipheredText += (char)((c - keyword.charAt(j) + 26) % 26 + 'A');
        j = ++j % keyword.length();
      
    return decipheredText;

【问题讨论】:

当我输入 BEXR TKGKTRQFARI 时,我得到 TI ZIXDYOVIUYSVK - 当我输入 JAVA PROGRAMMING 时,我得到 BEXR TKGKTRQFARI - 所以这里的示例有些问题。 对不起,这是加密的,我编辑它。 这种密文会泄露明文的信息。 【参考方案1】:

您明确地忽略了空格。您只需添加这一行:

if (c == ' ') 
   decipheredText += ' ';

确保把它放在这一行之前:

if (c < 'A' || c > 'Z') continue;

【讨论】:

【参考方案2】:

您忽略了空格。在检查字符范围 'A' 到 'Z' 时检查空格,并将其添加到 decipheredText 作为空格,因为您不希望空格被视为另一个字符。

【讨论】:

以上是关于Java Vigenere 密码的主要内容,如果未能解决你的问题,请参考以下文章

使用从文件中读取明文的 Vigenere 密码进行加密 (JAVA)

Java vigenere 密码性能问题

Java 中的 Vigenere 密码算法 - 将消息解密为明文

Vigenere Cipher(Java)[重复]

为啥 Vigenere 密码只能正确加密部分消息?

Python:解码使用仿射密码编码的 Vigenere 密码