#navi_header|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進数変換関数が書かれてます。実際はそちらを参考にするべきでしょう。 #amazon||> ||< * 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モジュールでの結果と同じになります。 #navi_footer|Erlang|