2010/12/14

RubyでLeet

第5回北海道情報セキュリティ勉強会のTessyさんのセッションの中で「Unl33t」という言葉が出てきました。つまりLeet変換されたものを戻すことなのですが、これをちょっとRubyでやってみよう...と思ったら、力技になりましたorz きっともっとエレガントに書けるんだと思うんだけど、とりあえず書いちゃう。何か良い方法があったら教えてください。

#!/usr/bin/ruby -Ku

class Array
  def choice
    at(rand(size))
  end
end

keyword = ARGV[0].dup

keyword.gsub!(/A|a/,['4','/\\','@','/-\\','^','aye','(L','Д'].choice)
keyword.gsub!(/B|b/,['3','P>','|:','!3','(3','/3',')3','|-]','j3'].choice)
keyword.gsub!(/C|c/,['[','<','('].choice)
keyword.gsub!(/D|d/,[')','(|','|o','[)','I>','|>','T)','I7','cl','|}','|]'].choice)
keyword.gsub!(/E|e/,['=-'].choice)
keyword.gsub!(/F|f/,['=','|#','ph','/=','v'].choice)
keyword.gsub!(/G|g/,['6','&','(_+','9','C-','gee','(?,','[,','{,','<-','(.'].choice)
keyword.gsub!(/H|h/,['|','|-|',']~[','}{','!-!','1-1','\\-/','I+I','}-{'].choice)
keyword.gsub!(/I|i/,['eye','3y3','][',']','/me'].choice)
keyword.gsub!(/J|j/,['_/','</','_]','(/'].choice)
keyword.gsub!(/K|k/,['<','|{',']{','|X'].choice)
keyword.gsub!(/L|l/,['|_','el','[]_','[_'].choice)
keyword.gsub!(/M|m/,['v|','[V]','{V}','/V\\','em','AA','|\\/|','/\\/\\','(u)','(V)','(\\/)','/|\\','^^','/|/|','//\\','|\\|\\',']\\/['].choice)
keyword.gsub!(/N|n/,['\\|','/\\/','[\\]','<\\>','{\\}','[]\\','//','[]','/V','1V','И','^'].choice)
keyword.gsub!(/O|o/,['0','()','oh','[]','p','<>'].choice)
keyword.gsub!(/P|p/,['*','|o','|?','|^(o)','|>','|"','9','[]D','|7'].choice)
keyword.gsub!(/Q|q/,['&'].choice)
keyword.gsub!(/R|r/,['`','|~','|?','/2','|^','lz','|9','2','12','[z','.-','|2','|-'].choice)
keyword.gsub!(/S|s/,['5','$','z','§','ehs','es','2'].choice)
keyword.gsub!(/T|t/,['-','][','†','"|"'].choice)
keyword.gsub!(/U|u/,['_|','v','L|'].choice)
keyword.gsub!(/V|v/,['/','\\|'].choice)
keyword.gsub!(/W|w/,['/','\\_|_/','\\_:_/','Ш','uu','2u','\\\\//\\\\//','ω'].choice)
keyword.gsub!(/X|x/,['><','Ж','}{','ecks','×','?',')(','][','}{'].choice)
keyword.gsub!(/Y|y/,['/'].choice)
keyword.gsub!(/Z|z/,['_'].choice)

puts keyword

exit
実行してみたらこんな感じ。
$ ./leet.rb "Hack the Planet."
}-{@(< -}-{=- |^(o)[_@И=--.
難読化だなぁ。これを使って何か面白いものが作れないか考えてみたいと思います。