アルファベット順にn文字ずらした文字列を生成する、いわゆるシーザー暗号(Caesar cipher)。
これをLinuxコンソール上でワンライナーで作成させるには、どうすればよいのだろう?と思ったので、少し調べてみた。
とりあえず、以下のようにコマンドを実行することでアルファベットの小文字を任意の数ずらすことが可能だ。
(○にずらす数を入れる)
コマンド | tr $(printf %○s | tr ' ' '.' | tac)\a-z a-za-z # アルファベットをずらす コマンド | tr a-z $(printf %○s | tr ' ' '.')\a-z # ずらしたのを戻す
[root@BS-PUB-CENT7-01 ~]# echo abcdefg | tr $(printf %1s | tr ' ' '.' | tac)\a-z a-za-z bcdefgh [root@BS-PUB-CENT7-01 ~]# echo abcdefg | tr $(printf %5s | tr ' ' '.' | tac)\a-z a-za-z fghijkl [root@BS-PUB-CENT7-01 ~]# echo abcdefg | tr $(printf %9s | tr ' ' '.' | tac)\a-z a-za-z jklmnop [root@BS-PUB-CENT7-01 ~]# echo jklmnop | tr a-z $(printf %9s | tr ' ' '.')\a-z abcdefg
大文字も含める場合は、現時点だと後ろにもう一個trを含める方法しか思いつかなかった。
[root@BS-PUB-CENT7-01 ~]# echo aBCdEfg | tr $(printf %9s | tr ' ' '.' | tac)\a-z a-za-z | tr $( printf %9s | tr ' ' '.' | tac)\A-Z A-ZA-Z jKLmNop
なお、ROT13(13個ずらす)場合は、Pythonのライブラリがあるのでそちらで処理が可能だ。
コマンド | python -c 'print(raw_input().encode("rot13"))'
[root@BS-PUB-CENT7-01 ~]# echo ABcdEfGh | python -c 'print(raw_input().encode("rot13"))' NOpqRsTu
