例えば slack で言いづらいことを暗号化(難読化)して分かる奴だけに伝えたい時ってありますよね?
(だったらDMしろよ!という声が聞こえなくも無いですが・・・)
るあてっはでテムガに らうのータニモはギカ のえくづでそ
これは単に rev | fold しただけなのでバレバレですが、
もうちょっと簡単に難読化したいですよね?
嚮囑囈嘲嘛圄壓壙圉坡奢夥倬圄嗾唳囹壑埀奕囑圉囃囎嗔喙
何と nkf -r で出来ます!
$ echo 'そでづくえのカギはモニターのうらにガムテではってある' | nkf -r
嚮囑囈嘲嘛圄壓壙圉坡奢夥倬圄嗾唳囹壑埀奕囑圉囃囎嗔喙
$ echo 'そでづくえのカギはモニターのうらにガムテではってある' | nkf -r | nkf -r
そでづくえのカギはモニターのうらにガムテではってある
漢字は変換時に欠落することがあるので、ひらがな、カタナカのみがお勧めです
ぜひスラッシュコマンドに登録しておきましょう(←しない)
rot13は普通 a-zA-Z の変換を指しますよね
# マルチバイト文字はそのまま
$ python -c 'import codecs; print(codecs.encode("海賊王にoreはなる!", "rot-13"))'
海賊王にberはなる!
で、たまたま ROT13 - Qiita を眺めてたところ
nkf -r と書いてあるのを見つけ、何このオプションと思ったら
$ man nkf | grep -wF -- -r
-r ROT13/47 の変換をする。
で、試しにやってみたら
$ echo "海賊王にoreはなる!" | nkf -r
瞋騾疸囹ber圉囮喙!
すげー!
と思ったのも束の間、
# 欠ける例
$ echo 袖机の鍵はモニターの裏にガムテで貼ってある | nkf -r | nkf -r
袖机の鍵はモニターのにガムテでってある
でもほら、ひらがな、カタカナがセーフならいいじゃん、と思いチェックしてみる
# utf-8 でひらがな全部
$ echo -e "\u30"{4..9}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}
぀ ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ け げ こ ご さ ざ し じ す ず せ ぜ そ ぞ た だ ち ぢ っ つ づ て で と ど な に ぬ ね の は ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ ゐ ゑ を ん ゔ ゕ ゖ ゗ ゘ ゙ ゚ ゛ ゜ ゝ ゞ ゟ
# 2回変換して元に戻るかチェック
$ diff -u \
<(echo -e "\u30"{4..9}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}| xargs -n1) \
<(echo -e "\u30"{4..9}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} | nkf -r | nkf -r | xargs -n1)
(出力無し)
割愛しますが、カタカナも元に戻りました
nkfのソースだとこの辺あたりだと思います
$ git clone https://scm.osdn.net/gitroot/nkf/nkf.git
$ cd nkf/
$ grep -rinw rot13
(略)
nkf.c:4156:#define rot13(c) ( \
nkf.c:4177: c1 = rot13(c1);
(略)