java - 使用java解密凯撒密码

标签 java encryption caesar-cipher

我正在尝试使用 Java 解密此塞萨尔密码,但似乎无法获取使用 key 正确解密代码的代码。我使用了 for 循环来迭代所有可能的 key 并打印出解密版本。解密的文本中应该只有大写字母。

/**
 * Write a description of class Main here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class Main
{
    // instance variables - replace the example below with your own
    private String message;
    private int key;
    private int c;


    /**
     * Constructor for objects of class Main
     */
    public Main()
    {
        // initialise instance variables
        // y is 76 ascii
        message = "YMUMNINYMNNBYZYUMCVCFCNSIZNBYCLWIOHMYFNBCMCMNBYWBCYZNBCHAVYHINJYLNOLVYXMUCXNBYJUAUHGILUFCMNNBUNQUMDOMNWFULYMIQHIJCHCIHVONBYQUMJYLNOLVYXFYNHINSIOLBYULNVYNLIOVFYXHYCNBYLFYNCNVYUZLUCXMUCXNBYHUTULYHYWFULYWBCGYXCHWILXCUFFSVONBCMBYULNQUMNLIOVFYXUFFNBYMUGYBIQBYQIOFXBUPYFCEYXNIWIHZLIHNNBIMYNQIALYUNNBCHEYLMUHXYULHYMNFSUJJYUFNINBYGUMZYFFIQGUHNIZYFFIQGYHUHXUMENBYGNINYFFBCGNBYCLGYNBIXBCMGIIXNLUHMGONYXCNMYFZCHNIUXIAAYXCHXCZZYLYHWYNCFFUNFYHANBBYZUHWCYXBYQUMFIIECHAIHBCMIQHYRCMNYHWYQCNBNBYJUMMCPYCHNYLYMNIZUHIONMCXYLBYQUMYGVCNNYLYXVSNBYWIHPCWNCIHNBUNUFFNBCMXYMIFUNCIHBUXVYYHVLIOABNUVIONVSNBYUWWCXYHNIZBYLVYCHAUXOLVYLPCFFYQBYHBYZIOHXNBUNNYMMWUGYIZNBUNYRBUOMNYXUHWCYHNFCHYUHXQUMHINIZNBYHYQNLCVYMZLIGVYFIQUMBYBUXZIHXFSXLYUGYXQBSBUXBYHINMNICWUFFSUVUHXIHYXBYLCHZCXYFCNSNIBCMJLCHWCJFYMNBCMQUMQBUNBYBUXAINVSUJIMNUMSUHXBCMJOHCMBGYHNQUMXYMYLPYXNBYHBYVYWUGYQYUL";
        for(int a = 0; a<27; a++)
        {
            key = a;

            for(int i=0; i<message.length(); i++)
            {

                char ch;
                c = message.charAt(i)-key%23;
                ch =(char) (c);
                System.out.print(ch); 


            }
            System.out.println("");
        }

    System.out.println("");

    }  
}

任何帮助将不胜感激。

最佳答案

c = message.charAt(i)-key%23;

应该是

c = (message.charAt(i) - 'A' - key + 26) % 26 + 'A';

因为:

  • message.charAt(i) 是 65 (A) 和 90 (Z) 之间的数字

  • message.charAt(i) - 'A' 是 0 到 25 之间的数字

  • key 应该是 0 到 25 之间的值

  • 我们希望结果为正,因此 - key + 26 是 1 到 26 之间的值

  • 加在一起是 1 到 51 之间的值

  • (...) % 26 是 0 到 25 之间的值

  • 最后 ... + 'A' 是 65 (A) 和 90 (Z) 之间的值

关于java - 使用java解密凯撒密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58845657/

相关文章:

凯撒密码未返回正确的 key

java - 使用ant,查找与正则表达式匹配的文件

java - 在java中读取文件时,字符之间存在空格

java - 使用java程序读取Excel文件

c++ - 用于 C++ 应用程序的快速非对称密码

c# - 三重 DES 加密

java - 创建 java 可执行文件

java - 返回字符串的方法

C Caesar Chiper - 大键错误

凯撒密码负数问题