[Ruby] シーザー暗号化

2018/05/14

Ruby テクノロジー プログラミング 特集

t f B! P L
もはや、PHP,Pythonのコードを書いたらRubyも書かないと気が済まなくなってきたので、一心不乱で書いてみました。 ruby言語はプログラム言語として非常に人気が高いという理由は、自分で書いてみて初めてわかりました。 いくつかのWEBプログラム言語を触ってきて気が付いたんですが、PythonとRubyは、まあまあ似た傾向があり、 PHPとjavascriptはC言語系の流れを受け継いでいるように思えました。 rubyがきちんとend記述をするのに対してpythonは、インデントをネストとして扱う為、僕は個人的にpython言語に気持ち悪さがありました。 これはPHPやjavascriptのswitch文を書いている時も同じ気持ちです。 きちんとendで閉じているrubyは、きちんと閉じタグの存在するxmlがhtmlのimgタグやmetaタグなどに気持ち悪さを感じた人が作り出したのではないかと、勝手に考えてしまいました。 そんなこんなで、今回はrubyを使って「シーザー暗号」を扱いますが、pythonからのローカライズでまあまあ楽に完成してしまいました。

ソースコード

# encoding: utf-8 require 'uri' class Caesar def encode(val , key) strs = URI.escape(val) result = "" for i in 0..strs.length-1 do result += (strs[i].ord + key).chr end return result end def decode(val , key) result = "" for i in 0..val.length-1 do result += (val[i].ord - key).chr end return URI.unescape(result) end end # test str = "あいうえおabcdefg" caesar = Caesar.new() enc = caesar.encode(str , 3); puts enc dec = caesar.decode(enc , 3); puts dec ## point ## "no implicit conversion of Fixnum into String (TypeError)"エラーが出る時 ##

簡単解説

今回は、オブジェクト指向を意識して、class構造で書いてみました。 冒頭の"require 'uri'"は、url文字エンコードを行うために読み込むライブラリです。 URI.escape(val) という箇所で使ってます。 stringのキャラクターコードは、ord、 キャラクターコードを文字列に戻すのは、chr、 これはどの言語も似たような感じですね。(若干の違いはありますが、こうしたstringの扱いは言語として準備されているようです) とりあえず、主要言語間でも、シーザー暗号のやりとりができるようになったので、いよいよ現実に使える見通しとなりました。 使うか使わないかはあなた次第。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ