シーザー暗号とも呼ばれる回転暗号を実装してみましょう。
シーザー暗号は、0から26までの整数の鍵を使って、アルファベットのすべての文字をずらす、単純なシフト暗号です。
鍵に0または26を使うと、剰余演算により、常に同じ結果になります。
文字は、鍵の値と同じ数だけずれます。
回転暗号の一般的な表記はROT + <key>です。
最もよく使われる回転暗号はROT13です。
ROT13をラテンアルファベットに適用すると、次のようになります。
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm
回転暗号は、鍵の候補が27通りあり、そのうち使えるのが25通りなので、アトバシュ暗号よりも強力です。
暗号文は、スペースや句読点も含めて、入力と同じ書式で書き出されます。
omgをtrlにしますcをcにしますCoolをCoolにしますThe quick brown fox jumps over the lazy dog.をGur dhvpx oebja sbk whzcf bire gur ynml qbt.にしますGur dhvpx oebja sbk whzcf bire gur ynml qbt.をThe quick brown fox jumps over the lazy dog.にしますこの演習では、ASCII文字とその数値とを相互に変換する必要があります。GNU awkのordchr拡張機能がこの機能を提供しています。ord()関数とchr()関数を追加するには、ファイルの先頭に@loadディレクティブを追加して、ordchr拡張機能を読み込みます:
@load "ordchr"