シーザー暗号
暗号化には二つのアルファベット列を使用する。暗号化のためのアルファベットは、通常のアルファベットを左、または右にいくつか循環シフト(ローテーション)させる。下図は、左に3文字の循環シフトをした場合のアルファベット列である。これは、右に23文字の循環シフトをした場合と同じである。シフトの方向およびシフトさせた個数はこの暗号の鍵として使用される。
暗号化する場合は、「通常のアルファベット」列から平文の文字を探し、対応する「暗号化アルファベット」列の文字を書き出す。
復号したい場合は逆をおこなえばよい。すなわち、右に3つ循環シフトさせる。
この暗号化の手順は合同算術を使用して表現することもできる。その場合、A = 0, B = 1, ..., Z = 25 のように、文字を数字に変換しておく。文字 x を n 個のシフトで暗号化する場合を数学的に表現すると、下記となる。
E n ( x ) = ( x + n ) mod 26 {\displaystyle E_{n}(x)=(x+n)\mod {26}}
同様に、復号は下記となる。
D n ( x ) = ( x − n ) mod 26 {\displaystyle D_{n}(x)=(x-n)\mod {26}}
プログラミングで実装する場合、使用する言語によって剰余演算の定義が異なる場合がある。上記の場合、結果は0以上25以下の範囲となるが、そうでない場合、26を加算する、もしくは減算する必要がある。
シーザー暗号の場合、文字の交換方式はメッセージ全体を通して同一である。このような暗号を単一換字式暗号と呼ぶ。対して、文字ごとに交換方式を変えるものを多表換字式暗号と呼ぶ。
その紙片を使って暗号文を並べると、別のいずれかの列に平文が出現する。
文字の頻度分布と組み合わせることで、別の総当たり攻撃を試みることができる。暗号文に出現する文字の頻度のグラフと、使用されている言語の文字の分布期待値のグラフにより、人はグラフの特徴を比べることで、いくつシフトしているかを容易に発見することができるだろう。たとえば、英語の平文ではEやTが最も出現頻度が高く、QやZが最も出現頻度が低いといった特徴がある。コンピュータを使用し、たとえばカイ二乗検定などを実施することでも、暗号文の出現頻度と平文の出現頻度の比較を行うこともできる。
自然言語の場合、ほとんどの場合において解読結果は1通りに定まるが、平文が極端に短い場合、複数の解読候補が存在しうる。たとえば、英語において、"MPQY"という暗号文は"aden"または"know"と解読しうる。同様に、"ALIIP"は"dolls"または"wheel"に、"AFCCP"は"jolly"または"cheer"に変換しうる。詳細は判別距離を参照。
シーザー暗号による暗号化や復号を複数回行った場合でも、安全性に変化はない。なぜなら、A 個分のシフトと B 個分のシフトを別個に行ったとしても、それは (A + B) 個分のシフトを行ったものと同等だからである。数学的には複数の暗号鍵による暗号化を行ったとしても、それはひとつの群として扱われる。