Quantcast
Channel: HP-UX –俺的備忘録 〜なんかいろいろ〜
Viewing all articles
Browse latest Browse all 99

Linuxコンソール上でアルファベット順にn文字ずらした文字列を得る(シーザー暗号)

$
0
0

アルファベット順に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

 

暗号技術入門 第3版 秘密の国のアリス 暗号技術入門 第3版 秘密の国のアリス

Viewing all articles
Browse latest Browse all 99

Trending Articles