我正在尝试使用 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/