在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
参考:https://studygolang.com/pkgdoc 导入方式: import "hash" hash包提供hash函数的接口。
Hashtype Hash interface { // 通过嵌入的匿名io.Writer接口的Write方法向hash中添加更多数据,永远不返回错误 io.Writer // 返回添加b到当前的hash值后的新切片,不会改变底层的hash状态 Sum(b []byte) []byte // 重设hash为无数据输入的状态 Reset() // 返回Sum会返回的切片的长度 Size() int // 返回hash底层的块大小;Write方法可以接受任何大小的数据, // 但提供的数据是块大小的倍数时效率更高 BlockSize() int } Hash是一个被所有hash函数实现的公共接口。 sha256包中有一个方法: Newfunc New() hash.Hash 返回一个新的使用SHA256校验算法的hash.Hash接口。 举例: package main import ( "fmt" "crypto/sha256" "log" "encoding" "bytes" ) func main() { 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 {//将上面生成的二进制形式的state解码成input1的值,并写到unmarshaler中,这样second中也有input1了 log.Fatal("unable to unmarshal hash:", err) } first.Write([]byte(input2)) second.Write([]byte(input2)) fmt.Printf("%x\n", first.Sum(nil))//57d51a066f3a39942649cd9a76c77e97ceab246756ff3888659e6aa5a07f4a52 fmt.Println(bytes.Equal(first.Sum(nil), second.Sum(nil))) //true }
Hash32type Hash32 interface { Hash Sum32() uint32 } Hash32是一个被所有32位hash函数实现的公共接口。 Hash64type Hash64 interface { Hash Sum64() uint64 } Hash64是一个被所有64位hash函数实现的公共接口。 |
请发表评论