home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Erlang/HowTo/GetMD5OrSHA1CheckSum

Erlang/HowTo/GetMD5OrSHA1CheckSum

Erlang / HowTo / GetMD5OrSHA1CheckSum
id: 417 所有者: msakamoto-sf    作成日: 2009-08-02 23:33:28
カテゴリ: Erlang 

ファイル内容のMD5, SHA-1チェックサムを取得してみます。

MD5の場合(erlangモジュール)

MD5であれば、erlang:md5/1 を使う事で取得できます。

1> {ok, Data} = file:read_file("target_file.dat").
{ok,<<...>>}
2> erlang:md5(Data).
<<107,234,210,187,213,214,238,244,213,7,165,33,228,191,197,244>>

erlang:md5_init/0, md5_update/2, md5_final/1を組み合わせても可能です。

3> C1 = erlang:md5_init().
<<1,35,69,...>>
4> C2 = erlang:md5_update(C1, Data).
<<158,140,...>>
5> C3 = erlang:md5_final(C2).
<<107,234,210,187,213,214,238,244,213,7,165,33,228,191,197,244>>

得られたバイナリはerlang:md5/1と同一です。

ダウンロードファイルのチェックサムを確認したい場合などは、バイナリから16進数表記の文字列にして、チェックサムが書かれたサーバ側のファイルと中身を付き合わせる事になると思います。
・・・が。バイナリを簡単に16進表記にするショートカット関数が上手い事見つかりませんでした。

とりあえず確認したかったので、アルゴリズムもへったくれもない力業で済ませておきます。

6> lists:flatten(lists:map(fun(X) -> io_lib:format("~.16X", [X,""]) end, binary_to_list(C3))).
"6BEAD2BBD5D6EEF4D57A521E4BFC5F4"

Erlangの素人が無理矢理でっち上げた力業なので、真似しないで下さい(;・∀・)。

「プログラミング Erlang」のソースコードに、lib_md5.erlというモジュールが入ってまして、これのソースコードを見るともっとちゃんと「プログラミング」されてる16進数変換関数が書かれてます。実際はそちらを参考にするべきでしょう。

SHA-1の場合(cryptoモジュール)

SHA-1についてはcryptoモジュールで提供されている sha/1, sha_init/0, sha_update/2, sha_final/1 を使って計算できました。sha/1の場合だけ載せます。

7> crypto:start().  % これをやっておかないとまずいらしい。
ok
8> C4 = crypto:sha1(Data).
<<149,229,83,86,245,217,56,145,166,127,215,161,123,238,204,31,131,12,10,86>>
9> crypto:stop().
ok

なお、crypto:md5/1, md5_init/0, md5_update/2, md5_final/1 というのもありまして、erlangモジュールでの結果と同じになります。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-08-02 23:58:53
md5:2894675ff639164743f94a51aca3b2d5
sha1:516b6db6db62763711fed3b8cc76ac0cc0724230
コメント
コメントを投稿するにはログインして下さい。