LoginSignup
13
8

More than 5 years have passed since last update.

Elixirでハッシュ関数を扱う。

Posted at

MD5とかSHA1、SHA256とかのやつです。

Elixirには、標準モジュールに用意されていない為、
Erlangの:cryptoモジュールを使用します。

寄り道 - Rubyの場合

Elixirの前にRubyでの結果を比較するために、Rubyでハッシュ値を求めてみます。

RubyではDigestモジュールを使用すると以下のようなハッシュ値を得られます。

irb(main):016:0> Digest::SHA256.hexdigest("hogehoge")
=> "4c716d4cf211c7b7d2f3233c941771ad0507ea5bacf93b492766aa41ae9f720d"

crypto単体で使った場合

:cryptoモジュールでは、戻り値の値が、バイナリで返却されます。
扱いやすくするために文字列にエンコードする必要があります。

pry(6)> :crypto.hash(:sha256, "hogehoge")
<<76, 113, 109, 76, 242, 17, 199, 183, 210, 243, 35, 60, 148, 23, 113, 173, 5, 7, 234, 91, 172, 249, 59, 73, 39, 102, 170, 65, 174, 159, 114, 13>>

エンコードをした場合

エンコードには、Baseモジュールのencode16ファンクションを使用します。
これを行なうことで、Rubyやその他ハッシュ関数を求めるライブラリと同じ結果を得られるようになります。

pry(7)> :crypto.hash(:sha256, "hogehoge") |> Base.encode16(case: :lower)
"4c716d4cf211c7b7d2f3233c941771ad0507ea5bacf93b492766aa41ae9f720d"

実際に使う場合は以下のようなモジュールにして使っています。

defmodule Digest do
  def sha256(data) do
    :crypto.hash(:sha256, data) |> Base.encode16(case: :lower)
  end
end

参考

おわりです。

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8