I am trying to decrypt this Cesar cipher using Java but cannot seem to get the code to decipher the code correctly using the key. I have used a for loop to iterate through all possible keys and print out the decrypted version. The decrypted text should have only capital letters in it.
/**
* 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("");
}
}
Any help would be much appreciated.
Basically you have to try out 26 keys and every time you leave the range of capital letters(<65) you add 26. Obviously the key you are looking for to decipher your message is 20.
String message = "YMUMNINYMNNBYZYUMCVCFCNSIZNBYCLWIOHMYFNBCMCMNBYWBCYZNBCHAVYHINJYLNOLVYXMUCXNBYJUAUHGILUFCMNNBUNQUMDOMNWFULYMIQHIJCHCIHVONBYQUMJYLNOLVYXFYNHINSIOLBYULNVYNLIOVFYXHYCNBYLFYNCNVYUZLUCXMUCXNBYHUTULYHYWFULYWBCGYXCHWILXCUFFSVONBCMBYULNQUMNLIOVFYXUFFNBYMUGYBIQBYQIOFXBUPYFCEYXNIWIHZLIHNNBIMYNQIALYUNNBCHEYLMUHXYULHYMNFSUJJYUFNINBYGUMZYFFIQGUHNIZYFFIQGYHUHXUMENBYGNINYFFBCGNBYCLGYNBIXBCMGIIXNLUHMGONYXCNMYFZCHNIUXIAAYXCHXCZZYLYHWYNCFFUNFYHANBBYZUHWCYXBYQUMFIIECHAIHBCMIQHYRCMNYHWYQCNBNBYJUMMCPYCHNYLYMNIZUHIONMCXYLBYQUMYGVCNNYLYXVSNBYWIHPCWNCIHNBUNUFFNBCMXYMIFUNCIHBUXVYYHVLIOABNUVIONVSNBYUWWCXYHNIZBYLVYCHAUXOLVYLPCFFYQBYHBYZIOHXNBUNNYMMWUGYIZNBUNYRBUOMNYXUHWCYHNFCHYUHXQUMHINIZNBYHYQNLCVYMZLIGVYFIQUMBYBUXZIHXFSXLYUGYXQBSBUXBYHINMNICWUFFSUVUHXIHYXBYLCHZCXYFCNSNIBCMJLCHWCJFYMNBCMQUMQBUNBYBUXAINVSUJIMNUMSUHXBCMJOHCMBGYHNQUMXYMYLPYXNBYHBYVYWUGYQYUL";
for(int a = -1; a<26; a++)
{
StringBuilder sb = new StringBuilder();
for(int i=0; i<message.length(); i++)
{
char ch = message.charAt(i);
int chAscii = (int) ch;
chAscii -= a;
if (chAscii < 65) {
chAscii = 26 + chAscii;
}
char newChar = (char) (chAscii);
sb.append(newChar);
}
System.out.println("For key = "+a+" the message is "+sb.toString());
}
}