RavyPop

=͟͟͞͞(๑=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞

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

 

 クラスにしてみました。FileDigestrubyの公式リファレンスに載っていたままです。

 

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