Recall that a Caesar Cipher has only 25 possible shifts. Also, for text of non-trivial length, it’s highly likely that only one shift will make the input make sense. One possible approach, then, is to see if the result of the shift makes sense; if it does, then it’s probably the correct shift (e.g. compare words against a dictionary to see if they’re “real” words; not sure if you’ve done web services yet, but there are free dictionary APIs available).
Consider the following text: 3 uryyb jbeyq
. Some possible shifts of this:
- 3 gdkkn vnqkc (12)
- 3 xubbe mehbt (3)
- 3 hello world (13)
- 3 jgnnq yqtnf (15)
- Etc.
As you can see, only the shift of 13 makes this text contain “real” words, so the correct shift is probably 13.
Another possible solution (albeit more complicated) is through frequency analysis (i.e. see if the resulting text has the same – or similar – statistical characteristics as English). For example, in English the most frequent letter is “e,” so the correct shift will likely have “e” as the most frequent letter. By way of example, the first paragraph of this answer contains 48 instances of the letter “e”, but if you shift it by 15 letters, it only has 8:
Gtrpaa iwpi p Rpthpg Rxewtg wph dcan 25 edhhxqat hwxuih. Pahd, udg
itmi du cdc-igxkxpa atcviw, xi’h wxvwan axztan iwpi dcan dct hwxui
lxaa bpzt iwt xceji bpzt htcht. Dct edhhxqat peegdprw, iwtc, xh id htt
xu iwt gthjai du iwt hwxui bpzth htcht; xu xi sdth, iwtc xi’h egdqpqan
iwt rdggtri hwxui (t.v. rdbepgt ldgsh pvpxchi p sxrixdcpgn id htt xu
iwtn’gt “gtpa” ldgsh; cdi hjgt xu ndj’kt sdct ltq htgkxrth nti, qji
iwtgt pgt ugtt sxrixdcpgn PEXh pkpxapqat).
The key word here is “likely” – it’s not at all statistically certain (especially for shorter texts) and it’s possible to write text that’s resistant to that technique to some degree (e.g. through deliberate misspellings, lipograms, etc.). Note that I actually have an example of an exception above – “3 xubbe mehbt” has more instances of the letter “e” than “3 hello world” even though the second one is clearly the correct shift – so you probably want to apply several statistical tests to increase your confidence (especially for shorter texts).
0
solved Ceaser Cipher crack using C language