世界一難しくないシーザー暗号(perl ord chr)

4-3.文字列置換

caesar

コマンドラインを実行してしばらく待つと文字が浮き上がります。

『世界一難しい恋』。嵐のリーダー主演の人気ドラマは、まもなく最終回です。
銭湯の牛乳は美味しいですよね。私は銭湯ではコーヒー牛乳なんですが、お風呂上りは何であんなに美味しいのでしょうか、何本でも飲める気がします。一本しか飲まないですが。
独裁的な社長鮫島さんは好きな人のために、嫌いな牛乳を2本も飲んだりしてましたが、お腹に注意です。

下記は、独裁官ジュリアス・シーザー(ユリウス・カエサル)が使ったことで知られるシーザー暗号を盛り込んだコマンドラインです。暗号自体は簡単なのですが、このコマンドラインが暗号のようなので、こちらを読み解く方がむずかしいかと思います。

~$ for i in $(banner `echo -n RSNQL |
 perl -pe 's/(.)/chr 1+ord $1/ge'` |
 perl -pe 'BEGIN{print " \n" x (50*3+11)}{chomp;$_=sprintf"%-50s",$_;s/(.)/$1\n/g}' | 
 grep -n \# | cut -d: -f1);do touch `expr $i - 1`;
 done;clear;for i in `seq 0 662|sort -R`;do
 printf "\x1b[%d;%dH" `expr $i / 51 + 1` `
 expr $i % 51 + 1`;if test -e $i;then printf " ";else
 printf "\x1b[4%dm \x1b[0m" `expr $i % 6 + 1`;fi;done;sleep 5

文字列”RSNQL”を解読してsysvbannerで生成したテキストを1文字ずつ改行し、行番号付きgrepをします。grepにより#が発見された番号を数字名のファイルとして保存し、数字名のファイルが存在していたら、色を塗る、ということをしています。また、一瞬で終わってしまわないように、時間のかかるexprを使っています。

実行動画です。

caesar

シーザー暗号の解読ロジックだけ抜き出しますが、要するにこういうことです。

~$ echo NJML | perl -pe 's/(.)/chr -1+ord $1/ge'
MILK
~$ 

コメント

タイトルとURLをコピーしました