博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go标准库的学习-hash
阅读量:6294 次
发布时间:2019-06-22

本文共 1882 字,大约阅读时间需要 6 分钟。

参考:https://studygolang.com/pkgdoc

导入方式:

import "hash"

hash包提供hash函数的接口。

 

type Hash

type 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包中有一个方法:

func New

func New() hash.Hash

返回一个新的使用SHA256校验算法的hash.Hash接口。

举例:

package mainimport (    "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}

 

type Hash32

type Hash32 interface {    Hash    Sum32() uint32}

Hash32是一个被所有32位hash函数实现的公共接口。

type Hash64

type Hash64 interface {    Hash    Sum64() uint64}

Hash64是一个被所有64位hash函数实现的公共接口。

转载于:https://www.cnblogs.com/wanghui-garcia/p/10452428.html

你可能感兴趣的文章
jmeter if 控制器
查看>>
Spring定时器时间设置规则
查看>>
算法のLowLow三人行
查看>>
appcompat_v7出现红叉解决方法
查看>>
javascript事件之:jQuery事件接口概述
查看>>
概率统计与机器学习:常见分布性质总结
查看>>
wcf部署到服务器上后,取不出oralcle数据
查看>>
嵌入式LINUX入门到实践(二)
查看>>
Linux的三种特殊权限
查看>>
PKU 2068 Nim
查看>>
测试基础-1.1
查看>>
15、响应式布局和BootStrap 全局CSS样式知识点总结-part2
查看>>
【MySQL】通过Binary Log简单实现数据回滚(一)
查看>>
255.Spring Boot+Spring Security:使用md5加密
查看>>
记录一款SQLite数据库管理软件
查看>>
将Oracle的语言从中文修改为英文
查看>>
matlab编译错误代码中英对照
查看>>
Python 元组
查看>>
hbase(ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet)
查看>>
[ZJOI2010]count 数字计数
查看>>