我正在尝试使用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("");
}
}
'''
任何帮助将不胜感激。
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
)]之间的值>