暗号技術入門 を読み始めたのですが、その中にシーザー暗号が出てきました。
ターミナルで解けないかなと思って調べたら
このページ
にたどり着きました。
trコマンドを使うとできるようです。
$ echo "krjhkrjh" | tr "$(printf %23sa-z)" a-za-z hogehoge |
うーん tr コマンドを使って置き換えているようだけどよくわからない...
trコマンドの説明抜粋
NAME tr -- translate characters SYNOPSIS tr [-Ccsu] string1 string2 tr [-Ccu] -d string1 tr [-Ccu] -s string1 tr [-Ccu] -ds string1 string2 |
string1をstring2に置き換えてくれますが、string1の先頭にスペースがあると置き換えられるstring2の文字列がずれます。
なるほど、記事を書いていてやっと理解できました。
printfを使うと、%フォーマットが使えるので、何文字ずらすが簡単にできます。
これを使って、シーザー暗号を特には1から25までずらして行って、意味の通るものが正解です。
先ほどの例を解く場合はxargsコマンドを使って、printfの数値を変化させれば良いです。
xargsを使って、複数コマンドを実行させるには、 sh -c としてコマンドを実行させます。
$ seq 1 25 | xargs -n 1 -I@ sh -c 'echo "krjhkrjh" | tr "$(printf %@sa-z)" a-za-z' lskilski mtljmtlj numknumk ovnlovnl pwompwom qxpnqxpn ryqoryqo szrpszrp tasqtasq ubtrubtr vcusvcus wdvtwdvt xewuxewu yfxvyfxv zgywzgyw ahzxahzx biaybiay cjbzcjbz dkcadkca eldbeldb fmecfmec gnfdgnfd hogehoge iphfiphf jqigjqig |
hogehogeが見つかりました。
0 件のコメント :
コメントを投稿