...

パッケージ hash

概要 ▾

hash パッケージはハッシュ関数のインターフェースを提供します。

例 (BinaryMarshaler)

コード:

const (
    input1 = "The tunneling gopher digs downwards, "
    input2 = "unaware of what he will find."
)

first := sha256.New()
first.Write([]byte(input1))

marshaler, ok := first.(encoding.BinaryMarshaler)
if !ok {
    log.Fatal("first does not implement encoding.BinaryMarshaler")
}
state, err := marshaler.MarshalBinary()
if err != nil {
    log.Fatal("unable to marshal hash:", err)
}

second := sha256.New()

unmarshaler, ok := second.(encoding.BinaryUnmarshaler)
if !ok {
    log.Fatal("second does not implement encoding.BinaryUnmarshaler")
}
if err := unmarshaler.UnmarshalBinary(state); err != nil {
    log.Fatal("unable to unmarshal hash:", err)
}

first.Write([]byte(input2))
second.Write([]byte(input2))

fmt.Printf("%x\n", first.Sum(nil))
fmt.Println(bytes.Equal(first.Sum(nil), second.Sum(nil)))

出力:

57d51a066f3a39942649cd9a76c77e97ceab246756ff3888659e6aa5a07f4a52
true

目次 ▾

Package (BinaryMarshaler)

パッケージファイル

hash.go

type Hash

Hash (ハッシュ) は,すべてのハッシュ関数によって実装される共通のインターフェースです。

標準ライブラリのハッシュ実装 (例えば, hash/crc32 や crypto/sha256) は encoding.BinaryMarshaler と encoding.BinaryUnmarshaler インターフェースを実装します。 ハッシュ実装をマーシャリングすると,以前にハッシュに書き込まれたデータを再書き込みする必要なしに,その内部状態を保存して後で追加の処理に使用することができます。 ハッシュ状態には,元の形式で入力の一部が含まれている可能性があります。 これは,ユーザーがセキュリティ上の影響を考慮して処理することが期待されています。

互換性: hash または crypto パッケージへの将来の変更は,以前のバージョンを使用してエンコードされた状態との互換性を維持するために努力するでしょう。 つまり,パッケージのどのリリースバージョンでも,セキュリティ修正などの問題を条件として,以前にリリースされたバージョンで書き込まれたデータをデコードできるはずです。 背景については Go 互換性文書を参照してください: https://golang.org/doc/go1compat

type Hash interface {
    // Write (埋め込み io.Writer インターフェース経由) は,実行中のハッシュにさらにデータを追加します。
    // エラーを返すことはありません。
    io.Writer

    // Sum は現在のハッシュを b に追加し,結果のスライスを返します。
    // 内部のハッシュ状態は変更されません。
    Sum(b []byte) []byte

    // Reset は,ハッシュを初期状態にリセットします。
    Reset()

    // Size は Sum が返すバイト数を返します。
    Size() int

    // BlockSize はハッシュの内部のブロックサイズを返します。
    // Write メソッドは任意の量のデータを受け入れることができなければなりませんが,すべての書き込みがブロックサイズの倍数である場合はより効率的に動作する可能性があります。
    BlockSize() int
}

type Hash32

Hash32 は,すべての 32 ビットハッシュ関数によって実装される共通のインターフェースです。

type Hash32 interface {
    Hash
    Sum32() uint32
}

type Hash64

Hash64 は,すべての 64 ビットハッシュ関数によって実装された共通のインターフェースです。

type Hash64 interface {
    Hash
    Sum64() uint64
}

サブディレクトリ

名前 概要
..
adler32 adler32 パッケージは,Adler-32 チェックサムを実装します。
crc32 crc32 パッケージは,32 ビット巡回冗長検査 (CRC-32) チェックサムを実装します。
crc64 crc64 パッケージは,64 ビット巡回冗長検査 (CRC-64) チェックサムを実装します。
fnv fnv パッケージは,Glenn Fowler, Landon Curt Noll, Phong Vo によって作成された非暗号学的ハッシュ関数 FNV-1 と FNV-1a を実装します。