英語版
このページの英語版を見る

std.digest.md

任意のデータのMD5ハッシュを計算する。MD5ハッシュは16バイトで、チェックサムやCRCのようなものである。 チェックサムやCRCのようなものだが、より堅牢である。
カテゴリー 関数
Template API MD5
OOP API MD5Digest
Helpers md5Of
このモジュールはstd.digest で定義されているAPIに準拠している。テンプレートと テンプレートとOOP APIの違いについては std.digest.
このモジュールは、一般にインポートしている std.digestモジュールとして使用できる。 モジュールとして使用できる。

CTFE ダイジェストはCTFEでは機能しない

Authors:
Piotr Szturmaj, Kai Nacke, Johannes Pfau
The routines and algorithms are derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm.

ソース std/digest/md.d

Examples:
//テンプレートAPI
import std.digest.md;

//データを供給する
ubyte[1024] data;
MD5 md5;
md5.start();
md5.put(data[]);
md5.start(); //再度開始する
md5.put(data[]);
auto hash = md5.finish();
Examples:
//OOP API
import std.digest.md;

auto md5 = new MD5Digest();
ubyte[] hash = md5.digest("abc");
writeln(toHexString(hash)); // "900150983CD24FB0D6963F7D28E17F72"

//給餌データ
ubyte[1024] data;
md5.put(data[]);
md5.reset(); //再度開始する
md5.put(data[]);
hash = md5.finish();
struct MD5;
テンプレートAPIのMD5実装。 テンプレートAPIとOOP APIの違いについてはstd.digest を参照のこと。
Examples:
//簡単な例、md5Ofヘルパー関数を使った文字列のハッシュ化
ubyte[16] hash = md5Of("abc");
//ハッシュ文字列を取得してみよう
writeln(toHexString(hash)); // "900150983CD24FB0D6963F7D28E17F72"
Examples:
//基本APIを使う
MD5 hash;
hash.start();
ubyte[1024] data;
//ここでデータを初期化する
hash.put(data);
ubyte[16] result = hash.finish();
Examples:
//テンプレートの機能を使おう:
void doSomething(T)(ref T hash)
if (isDigest!T)
{
    hash.put(cast(ubyte) 0);
}
MD5 md5;
md5.start();
doSomething(md5);
writeln(toHexString(md5.finish())); // "93B885ADFE0DA089CDF634904FD59F71"
pure nothrow @nogc @trusted void put(scope const(ubyte)[] data...);
ダイジェストにデータを供給するために使用する。 また std.range.primitives.isOutputRange ubyte const(ubyte)[] インターフェースも実装している。

例:

MD5 dig;
dig.put(cast(ubyte) 0); //シングルubyte
dig.put(cast(ubyte) 0, cast(ubyte) 0); //可変長
ubyte[10] buf;
dig.put(buf); //バッファ

pure nothrow @nogc @safe void start();
MD5ダイジェストの(再)初期化に使用する。

注釈: このMD5ダイジェストの実装では、デフォルトの構築後にstartを呼び出す を呼び出す必要はない。startを呼び出す必要があるのは、ダイジェストをリセットするときだけである。

異なるダイジェスト型を扱う一般的なコードは、常にstartを呼び出すべきである。

例:

MD5 digest;
//digest.start(); //必要ない
digest.put(0);

pure nothrow @nogc @trusted ubyte[16] finish();
完成したMD5ハッシュを返す。これは startを呼び出す。 内部状態をリセットする。
Examples:
//簡単な例
MD5 hash;
hash.start();
hash.put(cast(ubyte) 0);
ubyte[16] result = hash.finish();
auto md5Of(T...)(T data);
これは std.digest.digestこれは MD5実装を使うための便利な別名である。
Examples:
ubyte[16] hash = md5Of("abc");
writeln(hash); // digest!MD5("abc")
alias MD5Digest = std.digest.WrapperDigest!(MD5).WrapperDigest;
OOP APIのMD5実装。 テンプレートとOOP APIの違いについてはstd.digest を参照のこと。
これは std.digest.WrapperDigest!MD5の別名である。 の別名である。
Examples:
//Digest.digestヘルパー関数を使用して文字列をハッシュする簡単な例
auto md5 = new MD5Digest();
ubyte[] hash = md5.digest("abc");
//ハッシュ文字列を取得してみよう
writeln(toHexString(hash)); // "900150983CD24FB0D6963F7D28E17F72"
Examples:
//OOPの機能を使ってみよう:
void test(Digest dig)
{
 dig.put(cast(ubyte) 0);
}
auto md5 = new MD5Digest();
test(md5);

//カスタム・バッファを使おう:
ubyte[16] buf;
ubyte[] result = md5.finish(buf[]);
writeln(toHexString(result)); // "93B885ADFE0DA089CDF634904FD59F71"