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
参考
おわりです。