シーザー暗号は世界で最も知られている暗号の一つです。
シーザー暗号のうちアルファベット順で ずらすものは ROT13 と呼ばれ、広く利用されています。
ここでは文字の種類数を とします。
バイトをそのまま扱う場合は、 となりますが、制御文字などを除けば、 です。
のすべての位置に対して、 のすべてのシフトと比較します。
これによって正しい答えは出ますが、 回の文字の比較が必要になるため、間に合いません。
を観察すると、連続する 文字間の差分が一致している場合はシフトが含まれていることが見えてきます。
よって、差分を取った文字列を とし、これらに対して検索することで となります。
しかし、これではまだ間に合いません。
KMP 法 や Z-Algorithm など、線形時間で文字列を検索できるアルゴリズムを使うことで 時間でこの問題を解くことができました。