#author("2020-07-22T12:06:34+09:00","default:nobuoki","nobuoki") #author("2020-07-22T12:07:21+09:00","default:nobuoki","nobuoki") 例えば slack で言いづらいことを暗号化(難読化)して分かる奴だけに伝えたい時ってありますよね? (だったらDMしろよ!という声が聞こえなくも無いですが・・・) るあてっはでテムガに らうのータニモはギカ のえくづでそ これは単に rev | fold しただけなのでバレバレですが、 もうちょっと簡単に難読化したいですよね? 嚮囑囈嘲嘛圄壓壙圉坡奢夥倬圄嗾唳囹壑埀奕囑圉囃囎嗔喙 何と nkf -r で出来ます! #prism(bash){{ $ echo 'そでづくえのカギはモニターのうらにガムテではってある' | nkf -r 嚮囑囈嘲嘛圄壓壙圉坡奢夥倬圄嗾唳囹壑埀奕囑圉囃囎嗔喙 $ echo 'そでづくえのカギはモニターのうらにガムテではってある' | nkf -r | nkf -r そでづくえのカギはモニターのうらにガムテではってある }} 漢字は変換時に欠落することがあるので、ひらがな、カタナカのみがお勧めです ぜひスラッシュコマンドに登録しておきましょう(←しない) ** 余談 [#w6b3b513] rot13は普通 a-zA-Z の変換を指しますよね #prism(bash){{{ # マルチバイト文字はそのまま $ python -c 'import codecs; print(codecs.encode("海賊王にoreはなる!", "rot-13"))' 海賊王にberはなる! }}} で、たまたま [[ROT13 - Qiita>https://qiita.com/STomohiko/items/ff23b001b986015e9691]] を眺めてたところ nkf -r と書いてあるのを見つけ、何このオプションと思ったら #prism(bash){{{ $ man nkf | grep -wF -- -r -r ROT13/47 の変換をする。 }}} で、試しにやってみたら #prism(bash){{{ $ echo "海賊王にoreはなる!" | nkf -r 瞋騾疸囹ber圉囮喙! }}} すげー! と思ったのも束の間、 #prism(bash){{{ # 欠ける例 $ echo 袖机の鍵はモニターの裏にガムテで貼ってある | nkf -r | nkf -r 袖机の鍵はモニターのにガムテでってある }}} でもほら、ひらがな、カタカナがセーフならいいじゃん、と思いチェックしてみる でもまぁ、ひらがな、カタカナがセーフならいいじゃん、と思いチェックしてみる - [[Hiragana (Unicode block) - Wikipedia>https://en.wikipedia.org/wiki/Hiragana_%28Unicode_block%29]] - [[Katakana (Unicode block) - Wikipedia>https://en.wikipedia.org/wiki/Katakana_%28Unicode_block%29]] #prism(bash){{{ # 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のソースだとこの辺あたりのようです #prism(bash){{{ $ 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); (略) }}} nkf.c #prism(c){{{ 4156 #define rot13(c) ( \ 4157 ( c < 'A') ? c: \ 4158 (c <= 'M') ? (c + 13): \ 4159 (c <= 'Z') ? (c - 13): \ 4160 (c < 'a') ? (c): \ 4161 (c <= 'm') ? (c + 13): \ 4162 (c <= 'z') ? (c - 13): \ 4163 (c) \ 4164 ) 4165 4166 #define rot47(c) ( \ 4167 ( c < '!') ? c: \ 4168 ( c <= 'O') ? (c + 47) : \ 4169 ( c <= '~') ? (c - 47) : \ 4170 c \ 4171 ) 4172 4173 static void 4174 rot_conv(nkf_char c2, nkf_char c1) 4175 { 4176 if (c2 == 0 || c2 == JIS_X_0201_1976_K || c2 == ISO_8859_1) { 4177 c1 = rot13(c1); 4178 } else if (c2) { 4179 c1 = rot47(c1); 4180 c2 = rot47(c2); 4181 } 4182 (*o_rot_conv)(c2,c1); 4183 } }}} マルチバイト文字を考慮しているのかは・・・(分からず/たまたまうまく動いている、と信じよう)