maphash

package
v1.23.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 14, 2024 License: MIT Imports: 0 Imported by: 0

Documentation

Overview

maphashパッケージはバイト列上のハッシュ関数を提供します。 これらのハッシュ関数は、任意の文字列やバイト列を符号なし64ビット整数上の均一な分布にマッピングするために使用されることを意図しています。 ハッシュテーブルやデータ構造の異なるインスタンスごとに個別の Seed を使用する必要があります。

これらのハッシュ関数は、暗号的に安全ではありません。 (暗号的な使用には、crypto/sha256およびcrypto/sha512を参照してください。)

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/hash/maphash"
)

func main() {
	// ゼロのハッシュ値は有効で使用準備が整っています。初期シードの設定は必要ありません。
	var h maphash.Hash

	// 文字列をハッシュに追加し、現在のハッシュ値を表示します。
	h.WriteString("hello, ")
	fmt.Printf("%#x\n", h.Sum64())

	// 追加データをバイト配列の形式で追加します。
	h.Write([]byte{'w', 'o', 'r', 'l', 'd'})
	fmt.Printf("%#x\n", h.Sum64())

	// Resetは、以前にハッシュに追加されたすべてのデータを破棄しますが、
	// シードは変更しません。
	h.Reset()

	// 新しいハッシュh2を作成するために、SetSeedを使用し、hと完全に同じ動作をします。
	var h2 maphash.Hash
	h2.SetSeed(h.Seed())

	h.WriteString("same")
	h2.WriteString("same")
	fmt.Printf("%#x == %#x\n", h.Sum64(), h2.Sum64())
}
Output:

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Bytes added in v1.19.0

func Bytes(seed Seed, b []byte) uint64

Bytesは与えられたシードでbのハッシュを返します。

Bytesは以下と同等であり、しかもより便利で効率的です:

var h Hash
h.SetSeed(seed)
h.Write(b)
return h.Sum64()

func String added in v1.19.0

func String(seed Seed, s string) uint64

Stringは与えられたシードを使ってsのハッシュ値を返します。

Stringは以下のコードと同等ですが、より便利かつ効率的です:

var h Hash
h.SetSeed(seed)
h.WriteString(s)
return h.Sum64()

Types

type Hash

type Hash struct {
	// contains filtered or unexported fields
}

Hashはバイトシーケンスのシード付きハッシュを計算します。

ゼロのHashは使用する準備ができた有効なHashです。 ゼロのHashは、Reset、Write、Seed、またはSum64メソッドの最初の呼び出し時に自動でランダムなシードを選択します。 シードに対する制御には、SetSeedを使用します。

計算されたハッシュ値は、初期シードとHashオブジェクトに提供されたバイトのシーケンスにのみ依存し、 バイトの提供方法には依存しません。たとえば、以下の3つのシーケンス

h.Write([]byte{'f','o','o'})
h.WriteByte('f'); h.WriteByte('o'); h.WriteByte('o')
h.WriteString("foo")

はすべて同じ効果があります。

Hashは、ハッシュされるバイトシーケンスを制御する敵対者がいる場合でも、衝突耐性が意図されています。

Hashは、複数のゴルーチンによる並行使用には安全ではありませんが、Seedは安全です。 複数のゴルーチンが同じシードを使ってハッシュを計算する必要がある場合、 各ゴルーチンは独自のHashを宣言し、共通のシードでSetSeedを呼び出すことができます。

func (*Hash) BlockSize

func (h *Hash) BlockSize() int

BlockSize は h のブロックサイズを返します。

func (*Hash) Reset

func (h *Hash) Reset()

Resetはhに追加されたすべてのバイトを破棄します。 (シードは変わりません。)

func (*Hash) Seed

func (h *Hash) Seed() Seed

Seedはhのシード値を返します。

func (*Hash) SetSeed

func (h *Hash) SetSeed(seed Seed)

SetSeedは、hにseedを使用するように設定します。 seedは MakeSeed によって返されたか、別のハッシュのSeedメソッドによって返されたものでなければなりません。 同じseedを持つ2つの Hash オブジェクトは同じように振る舞います。 異なるseedを持つ2つの Hash オブジェクトは、非常に異なる振る舞いをする可能性があります。 この呼び出し前にhに追加されたすべてのバイトは破棄されます。

func (*Hash) Size

func (h *Hash) Size() int

Sizeはhのハッシュ値のサイズ、8バイトを返します。

func (*Hash) Sum

func (h *Hash) Sum(b []byte) []byte

Sumはハッシュの現在の64ビット値をbに追加します。 hash.Hash の実装のために存在します。 直接の呼び出しでは、 Hash.Sum64 を使用する方が効率が良いです。

func (*Hash) Sum64

func (h *Hash) Sum64() uint64

Sum64はhの現在の64ビット値を返します。これは、hのシードと、hに追加されたバイトのシーケンスに依存します。 最後の Hash.Reset または Hash.SetSeed の呼び出しからの呼び出しを含みます。 Sum64の結果のすべてのビットはほぼ均等に一様に分布しており、独立しているため、 ビットマスキング、シフト、またはモジュラ演算で安全に縮小することができます。

func (*Hash) Write

func (h *Hash) Write(b []byte) (int, error)

Writeはhによってハッシュされたバイトのシーケンスにbを追加します。 bのすべてを書き込み、失敗することはありません。countとerrorの結果は io.Writer を実装するためです。

func (*Hash) WriteByte

func (h *Hash) WriteByte(b byte) error

WriteByteは、hによってハッシュされるバイト列にbを追加します。 失敗することはありません。エラーの結果は、 io.ByteWriter の実装のためです。

func (*Hash) WriteString

func (h *Hash) WriteString(s string) (int, error)

WriteString は文字列 s のバイト列を h によってハッシュ化されたバイト列に追加します。 いつでも s のすべてを書き込み、失敗することはありません。count と error の結果は io.StringWriter の実装のためです。

type Seed

type Seed struct {
	// contains filtered or unexported fields
}

Seedは Hash によって計算されるハッシュ関数を選択するランダムな値です。 もし2つのHashが同じSeedを使う場合、任意の入力に対して同じハッシュ値を計算します。 もし2つのHashが異なるSeedを使う場合、任意の入力に対して異なるハッシュ値を計算する可能性が非常に高いです。

Seedは MakeSeed を呼び出すことで初期化する必要があります。 ゼロSeedは初期化されておらず、 Hash のSetSeedメソッドで使用することはできません。

各Seedの値は単一のプロセスに対してローカルであり、別のプロセスでシリアライズまたは再作成することはできません。

func MakeSeed

func MakeSeed() Seed

MakeSeed は新しいランダムなシードを返す。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL