std.md5
任意のデータのMD5ダイジェストを計算します。MD5ダイジェストはチェックサムやCRCに似た16byteのデータですが、より頑強です。この計算には二種類の方法があります。一つ目は、sum()関数の1回の呼び出しで 全て一気に計算してしまう方法。二つ目は、データをバッファリングする場合です。
BUGS:
MD5ダイジェストには既にコリジョンが発見されています
Author:
このライブラリのアルゴリズムとルーチンは、 RSA Data Security, Inc の MD5 Message-Digest Algorithm に由来します。
References:
Wikipedia on MD5
Example:
// This code is derived from the // RSA Data Security, Inc. MD5 Message-Digest Algorithm. import std.md5; private import std.stdio; private import std.string; private import std.c.stdio; private import std.c.string; int main(char[][] args) { foreach (char[] arg; args) MDFile(arg); return 0; } /* Digests a file and prints the result. */ void MDFile(char[] filename) { FILE* file; MD5_CTX context; int len; ubyte[4 * 1024] buffer; ubyte digest[16]; if ((file = fopen(std.string.toStringz(filename), "rb")) == null) writefln("%s can't be opened", filename); else { context.start(); while ((len = fread(buffer, 1, buffer.sizeof, file)) != 0) context.update(buffer[0 .. len]); context.finish(digest); fclose(file); writefln("MD5 (%s) = %s", filename, digestToString(digest)); } }
- void sum(ubyte[16] digest, void[] data);
- 配列 data のMD5ダイジェストを計算
- void printDigest(ubyte[16] digest);
- ダイジェストを16進表記で標準出力に表示
- string digestToString(ubyte[16] digest);
- MD5ダイジェストを文字列に変換
- struct MD5_CTX;
- MD5計算のコンテキストを保持
ダイジェストを計算するデータがバッファリングされているときに使用します。
- void start();
- MD5メッセージダイジェスト処理を開始します。
- void update(void[] input);
- 新しいブロック input
を処理してコンテキストを更新し、
MD5メッセージダイジェスト処理を続行します。
- void finish(ubyte[16] digest);
- MD5メッセージダイジェスト処理を終了し、結果を
digest へ出力します。