rubyでopenSSLを使う in Mac OS X その2
昨日は単なる文字列の暗号化と復号を行ったので、今日はハッシュとMAC(メッセージ認証コード)をやってみた。というかただ文字のハッシュぐらいなら一瞬でできます。
SHA256を使ってハッシュ値を計算する
require 'openssl' def make_sha256(str) dig256 = OpenSSL::Digest::SHA256.new() return dig256.hexdigest(str) end if __FILE__ == $0 plaintext = ARGV[0] digest_text = make_sha256(plaintext) puts digest_text end
クラスにしてみました。FileDigestはrubyの公式リファレンスに載っていたままです。
require 'openssl' class DigestClass def initialize(alg = "sha256") @digest = OpenSSL::Digest.new(alg) end #文字列のハッシュ def StringDigest(str) return @digest.hexdigest(str) end #ファイルのハッシュ def FileDigest(filename) File.open(filename){|f| while data = f.read(1024) @digest.update(data) end } return @digest.hexdigest end end #このプログラムが単体で実行される場合のみ以下を実行 if __FILE__ == $0 plaintext = ARGV[0] dig = DigestClass.new() digest_text = dig.StringDigest(plaintext) file_digest_text = dig.FileDigest("music.mp3") puts digest_text puts file_digest_text end
実行結果
bash-3.2$ ruby sha256.rb mengae a9b883f252d68ac420757464e749cfc2786b0fba21b2debcecbe70bdcc80fcbe 513b05c8f9e320e041efac5ea55949f9fa60dad0a4d004504469c89e911c2948
HMACを使ってメッセージ認証コードをつくる
rubyでHMACをつかってみました。といってもほとんどさっきのプログラムの流用で作ったんですけど。暗号鍵は昨日の"create_key.rb"を使って生成しました。
rubyでopenSSLを使う in Mac OS X
鍵に関しては”AES-256-CBC”でいいのか正直よくわからんです(笑
require 'openssl' require './create_key' class HmacClass def initialize(key, digest = "sha256") @hmac = OpenSSL::HMAC.new(key, digest) end #文字列のメッセージ認証コード def HmacStringDigest(str) @hmac.update(str) return @hmac.hexdigest end #ファイルのメッセージ認証コード def HmacFileDigest(filename) File.open(filename){|f| while data = f.read(1024) @hmac.update(data) end } return @hmac.hexdigest end end #このプログラムが単体で実行される場合のみ以下を実行 if __FILE__ == $0 plaintext = ARGV[0] ck = Create_key.new("AES-256-CBC") key = ck.key_gen hm = HmacClass.new(key, "sha256") digest_text = hm.HmacStringDigest(plaintext) file_digest_text = hm.HmacFileDigest("music.mp3") puts digest_text puts file_digest_text end
以下が実行結果です。
bash-3.2$ ruby hmac.rb megane 4cdd884655dd037e523a34620aaf8b6ad8a19f00bdb621302d7b1b9ee122b5c2 6f2b7822f47c961b6c0b78a199fa72c2d65c5a12286231b20cec2fd81c954d67