使用Java的Cees密码解密

问题描述 投票:0回答:1

我正在尝试使用Java解密此cesar密码,但似乎无法获得使用密钥正确解密代码的代码。我使用了for循环来遍历所有可能的键并打印出已解密的版本。解密后的文本中应仅包含大写字母。

'''

/**
 * 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("");

    }


}

'''

任何帮助将不胜感激。

java encryption caesar-cipher
1个回答
0
投票
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)]之间的值>

© www.soinside.com 2019 - 2024. All rights reserved.