英語版
このページの英語版を見る
std.digest.sha
任意のデータのSHA1およびSHA2ハッシュを計算する。SHAハッシュは20バイトから64バイトである。
量(SHAアルゴリズムによる)で、チェックサムやCRCのようなものだ、
のようなものだが、より堅牢である。
カテゴリー | 関数 |
---|---|
Template API | SHA1 |
OOP API | SHA1Digest |
Helpers | sha1Of |
License:
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
Kai Nacke, Johannes Pfau, Nick Sabalausky
ソース std/digest/sha.d
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
...); - 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...)(Tdata
);
autosha224Of
(T...)(Tdata
);
autosha256Of
(T...)(Tdata
);
autosha384Of
(T...)(Tdata
);
autosha512Of
(T...)(Tdata
);
autosha512_224Of
(T...)(Tdata
);
autosha512_256Of
(T...)(Tdata
); - これらは 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;
aliasSHA224Digest
= std.digest.WrapperDigest!(SHA!(512u, 224u)).WrapperDigest;
aliasSHA256Digest
= std.digest.WrapperDigest!(SHA!(512u, 256u)).WrapperDigest;
aliasSHA384Digest
= std.digest.WrapperDigest!(SHA!(1024u, 384u)).WrapperDigest;
aliasSHA512Digest
= std.digest.WrapperDigest!(SHA!(1024u, 512u)).WrapperDigest;
aliasSHA512_224Digest
= std.digest.WrapperDigest!(SHA!(1024u, 224u)).WrapperDigest;
aliasSHA512_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"
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku