暗号技術入門 を読み始めたのですが、その中にシーザー暗号が出てきました。
ターミナルで解けないかなと思って調べたら
[このページ](https://orebibou.com/2016/06/linuxコンソール上でアルファベット順にn文字ずらし/)
にたどり着きました。
trコマンドを使うとできるようです。
```bash
`gutter:false;
$ echo "krjhkrjh" | tr "$(printf %23sa-z)" a-za-z
hogehoge
```
うーん tr コマンドを使って置き換えているようだけどよくわからない...
trコマンドの説明抜粋
```
`gutter:false;
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 としてコマンドを実行させます。
```bash
`gutter:false; highlight:24;
$ 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 件のコメント :
コメントを投稿