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

std.digest.ripemd

任意のデータの RIPEMD-160 ハッシュを計算する。RIPEMD-160ハッシュは20バイトの量である。 チェックサムやCRCのようなものだが、よりロバストである。
カテゴリー 関数
Template API RIPEMD160
OOP API RIPEMD160Digest
Helpers ripemd160Of
で定義されているAPIに準拠している。 std.digest.で定義されているAPIに準拠している。 テンプレートとOOP APIの違いについては std.digest.
このモジュールは、std.digest を公的にインポートし、スタンドアロン・モジュールとして使用できる。 モジュールとして使用できる。

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

Authors:
Kai Nacke
The algorithm was designed by Hans Dobbertin, Antoon Bosselaers, and Bart Preneel.
The D implementation is a direct translation of the ANSI C implementation by Antoon Bosselaers.
Examples:
//テンプレートAPI
import std.digest.md;

ubyte[20] hash = ripemd160Of("abc");
writeln(toHexString(hash)); // "8EB208F7E05D987A9B044A8E98C6B087F15A0BFC"

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

auto md = new RIPEMD160Digest();
ubyte[] hash = md.digest("abc");
writeln(toHexString(hash)); // "8EB208F7E05D987A9B044A8E98C6B087F15A0BFC"

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

例:

RIPEMD160 dig;
dig.put(cast(ubyte) 0); //single ubyte
dig.put(cast(ubyte) 0, cast(ubyte) 0); //可変長
ubyte[10] buf;
dig.put(buf); //バッファ

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

注釈: このRIPEMD160ダイジェストの実装では、デフォルトの構築後にstartを呼び出す を呼び出す必要はない。startの呼び出しは、ダイジェストをリセットするためにのみ必要である。

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

例:

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

pure nothrow @nogc @trusted ubyte[20] finish();
終了したRIPEMD160ハッシュを返す。これは startを呼び出す。 内部状態をリセットする。

例:

//簡単な例
RIPEMD160 hash;
hash.start();
hash.put(cast(ubyte) 0);
ubyte[20] result = hash.finish();
assert(toHexString(result) == "C81B94933420221A7AC004A90242D8B1D3E5070D");

auto ripemd160Of(T...)(T data);
これは std.digest.digestを使うための便利なエイリアスである。 RIPEMD160実装を使うための便利なエイリアスである。
Examples:
ubyte[20] hash = ripemd160Of("abc");
writeln(hash); // digest!RIPEMD160("abc")
alias RIPEMD160Digest = std.digest.WrapperDigest!(RIPEMD160).WrapperDigest;
OOP API RIPEMD160 の実装。 テンプレートと OOP API の違いについてはstd.digest を参照のこと。
これは std.digest.WrapperDigest!RIPEMD160, の別名である。
Examples:
//Digest.digestヘルパー関数を使用して文字列をハッシュする簡単な例
auto md = new RIPEMD160Digest();
ubyte[] hash = md.digest("abc");
//ハッシュ文字列を取得してみよう
writeln(toHexString(hash)); // "8EB208F7E05D987A9B044A8E98C6B087F15A0BFC"
Examples:
//OOP機能を使おう:
void test(Digest dig)
{
  dig.put(cast(ubyte) 0);
}
auto md = new RIPEMD160Digest();
test(md);

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