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

std.digest.sha

任意のデータのSHA1およびSHA2ハッシュを計算する。SHAハッシュは20バイトから64バイトである。 量(SHAアルゴリズムによる)で、チェックサムやCRCのようなものだ、 のようなものだが、より堅牢である。
カテゴリー 関数
Template API SHA1
OOP API SHA1Digest
Helpers sha1Of
SHA2にはいくつかのバージョンがあり、このモジュールではすべてサポートされている: SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256である。
このモジュールは std.digest.テンプレートと テンプレートとOOP APIの違いについては std.digest.
このモジュールは、std.digest を公的にインポートし、スタンドアロン・モジュールとして使用できる。 モジュールとして使用できる。

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

Authors:
The routines and algorithms are derived from the Secure Hash Signature Standard (SHS) (FIPS PUB 180-2).
Kai Nacke, Johannes Pfau, Nick Sabalausky
Examples:
// テンプレートAPI
import std.digest.sha;

ubyte[20] hash1 = sha1Of("abc");
writeln(toHexString(hash1)); // "A9993E364706816ABA3E25717850C26C9CD0D89D"

ubyte[28] hash224 = sha224Of("abc");
writeln(toHexString(hash224)); // "23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7"

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

auto sha1 = new SHA1Digest();
ubyte[] hash1 = sha1.digest("abc");
writeln(toHexString(hash1)); // "A9993E364706816ABA3E25717850C26C9CD0D89D"

auto sha224 = new SHA224Digest();
ubyte[] hash224 = sha224.digest("abc");
writeln(toHexString(hash224)); // "23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7"

//データを供給する
ubyte[1024] data;
sha1.put(data[]);
sha1.reset(); //再度開始する
sha1.put(data[]);
hash1 = sha1.finish();
struct SHA(uint hashBlockSize, uint digestSize);
テンプレートAPI SHA1/SHA2の実装。サポートしている:SHA-1、SHA-224、SHA-256、 SHA-384、SHA-512、SHA-512/224、SHA-512/256。
hashBlockSizeとdigestSizeの単位はビットである。しかし、単純に 便利なエイリアスを使う方が簡単だろう:SHA1、SHA224、SHA256、SHA384、SHA512である、 SHA512_224とSHA512_256である。
テンプレートとOOP APIの違いについてはstd.digest を参照のこと。
Examples:
//単純な例、sha1Ofヘルパー関数を使った文字列のハッシュ化
ubyte[20] hash = sha1Of("abc");
//ハッシュ文字列を取得してみよう
writeln(toHexString(hash)); // "A9993E364706816ABA3E25717850C26C9CD0D89D"

//同じだが、SHA-224を使う
ubyte[28] hash224 = sha224Of("abc");
writeln(toHexString(hash224)); // "23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7"
Examples:
//基本APIを使う
SHA1 hash;
hash.start();
ubyte[1024] data;
//ここでデータを初期化する...
hash.put(data);
ubyte[20] result = hash.finish();
Examples:
//テンプレートの機能を使おう:
//注: SHA1を関数に渡す場合は、参照渡しでなければならない!
void doSomething(T)(ref T hash)
if (isDigest!T)
{
  hash.put(cast(ubyte) 0);
}
SHA1 sha;
sha.start();
doSomething(sha);
writeln(toHexString(sha.finish())); // "5BA93C9DB0CFF93F52B521D7420E43F6EDA2784F"
pure nothrow @nogc @safe void start();
SHA初期化。SHA1/SHA2 操作を開始する。

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

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

例:

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

pure nothrow @nogc @trusted void put(scope const(ubyte)[] input...);
ダイジェストにデータを供給する。 また std.range.primitives.isOutputRange ubyte const(ubyte)[] インターフェースも実装している。
pure nothrow @nogc @trusted ubyte[digestSize / 8] finish();
完成したSHAハッシュを返す。これはまた startを呼び出す。 を呼び出して内部状態をリセットする。
Examples:
//簡単な例
SHA1 hash;
hash.start();
hash.put(cast(ubyte) 0);
ubyte[20] result = hash.finish();
alias SHA1 = SHA!(512u, 160u).SHA;
SHA-1のSHAエイリアス、ハッシュはubyte[20]である。
alias SHA224 = SHA!(512u, 224u).SHA;
SHA-224のSHAエイリアス、ハッシュはubyte[28]である。
alias SHA256 = SHA!(512u, 256u).SHA;
SHA-256のSHAエイリアス、ハッシュはubyte[32]である。
alias SHA384 = SHA!(1024u, 384u).SHA;
SHA-384のSHAエイリアス、ハッシュはubyte[48]である。
alias SHA512 = SHA!(1024u, 512u).SHA;
SHA-512のSHAエイリアス、ハッシュはubyte[64]である。
alias SHA512_224 = SHA!(1024u, 224u).SHA;
SHA-512/224のSHAエイリアス、ハッシュはubyte[28]である。
alias SHA512_256 = SHA!(1024u, 256u).SHA;
SHA-512/256のSHAエイリアス、ハッシュはubyte[32]である。
auto sha1Of(T...)(T data);

auto sha224Of(T...)(T data);

auto sha256Of(T...)(T data);

auto sha384Of(T...)(T data);

auto sha512Of(T...)(T data);

auto sha512_224Of(T...)(T data);

auto sha512_256Of(T...)(T data);
これらは std.digest.digestこれらは SHA実装を使用するための便利なエイリアスである。
Examples:
ubyte[20] hash = sha1Of("abc");
writeln(hash); // digest!SHA1("abc")

ubyte[28] hash224 = sha224Of("abc");
writeln(hash224); // digest!SHA224("abc")

ubyte[32] hash256 = sha256Of("abc");
writeln(hash256); // digest!SHA256("abc")

ubyte[48] hash384 = sha384Of("abc");
writeln(hash384); // digest!SHA384("abc")

ubyte[64] hash512 = sha512Of("abc");
writeln(hash512); // digest!SHA512("abc")

ubyte[28] hash512_224 = sha512_224Of("abc");
writeln(hash512_224); // digest!SHA512_224("abc")

ubyte[32] hash512_256 = sha512_256Of("abc");
writeln(hash512_256); // digest!SHA512_256("abc")
alias SHA1Digest = std.digest.WrapperDigest!(SHA!(512u, 160u)).WrapperDigest;

alias SHA224Digest = std.digest.WrapperDigest!(SHA!(512u, 224u)).WrapperDigest;

alias SHA256Digest = std.digest.WrapperDigest!(SHA!(512u, 256u)).WrapperDigest;

alias SHA384Digest = std.digest.WrapperDigest!(SHA!(1024u, 384u)).WrapperDigest;

alias SHA512Digest = std.digest.WrapperDigest!(SHA!(1024u, 512u)).WrapperDigest;

alias SHA512_224Digest = std.digest.WrapperDigest!(SHA!(1024u, 224u)).WrapperDigest;

alias SHA512_256Digest = std.digest.WrapperDigest!(SHA!(1024u, 256u)).WrapperDigest;
OOP APIのSHA1およびSHA2実装。 テンプレートとOOP APIの違いについてはstd.digest を参照のこと。
これは std.digest.WrapperDigest!SHA1の別名である。 の別名である。
Examples:
//Digest.digestヘルパー関数を使用して文字列をハッシュする簡単な例
auto sha = new SHA1Digest();
ubyte[] hash = sha.digest("abc");
//ハッシュ文字列を取得してみよう
writeln(toHexString(hash)); // "A9993E364706816ABA3E25717850C26C9CD0D89D"

//同じだが、SHA-224を使う
auto sha224 = new SHA224Digest();
ubyte[] hash224 = sha224.digest("abc");
//ハッシュ文字列を得よう
writeln(toHexString(hash224)); // "23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7"
Examples:
//OOP機能を使おう:
void test(Digest dig)
{
  dig.put(cast(ubyte) 0);
}
auto sha = new SHA1Digest();
test(sha);

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