go标准库的学习-hash
参考: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 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
}
type Hash32
type Hash32 interface {
Hash
Sum32() uint32
}
Hash32是一个被所有32位hash函数实现的公共接口。
type Hash64
type Hash64 interface {
Hash
Sum64() uint64
}
Hash64是一个被所有64位hash函数实现的公共接口。
go标准库的学习-hash的更多相关文章
- go标准库的学习-crypto/md5
参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/md5" md5包实现了MD5哈希算法,参见RFC 1321. Con ...
- go标准库的学习-crypto/sha1
参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/sha1" sha1包实现了SHA1哈希算法,参见RFC 3174. ...
- go标准库的学习-crypto/sha256
参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/sha256" sha256包实现了SHA224和SHA256哈希算法 ...
- go标准库的学习-net/http
参考:https://studygolang.com/pkgdoc 概念解释: request:用户请求的信息,用来解析用户的请求信息,包括post.get.cookie.url等信息 respons ...
- go标准库的学习-database/sql
参考:https://studygolang.com/pkgdoc 导入方式: import "database/sql" sql包提供了保证SQL或类SQL数据库的泛用接口. 使 ...
- python 标准库基础学习之开发工具部分1学习
#2个标准库模块放一起学习,这样减少占用地方和空间#标准库之compileall字节编译源文件import compileall,re,sys#作用是查找到python文件,并把它们编译成字节码表示, ...
- python calendar标准库基础学习
# -*- coding: utf-8 -*-# 作者:新手__author__ = 'Administrator'#标准库:日期时间基础学习:calendar:处理日期#例1import calen ...
- 《C标准库》学习笔记整理
简介 <C标准库>书中对 C 标准库中的 15 个头文件的内容进行了详细的介绍,包括各头文件设计的背景知识.头文件中的内容.头文件中定义的函数和变量的使用.实现.测试等. 我学习此书的目的 ...
- python linecache标准库基础学习
#python标准库基础之:linecacge:高效读取文本文件#说明与作用"""可以从文件或者导入python模块获取文件,维护一个结果缓存,从而可以更高效地从相同文件 ...
随机推荐
- [转]微擎人人商城m()函数调用model方法
本文转自:http://yangjunwei.com/a/3177.html 微擎人人商城p()函数可内部调用任意插件的函数 http://yangjunwei.com/a/3216.html
- 不要使用 JWT 进行会话管理
英文原文地址:Stop using JWT for sessions 最近我发现越来越多的人推荐使用 JWT 来在 Web 应用中管理会话(Session),这是一个非常非常糟糕的主意,在这篇文章中我 ...
- 在EF中执行SQL语句(转载)
在EF中执行SQL语句 你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除 ...
- HDU6191(01字典树启发式合并)
Query on A Tree Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Othe ...
- blfs(systemd版本)学习笔记-编译安装openssh软件包
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! openssh项目地址:http://www.linuxfromscratch.org/blfs/view/stable/pos ...
- layui 图片上传+表单提交+ Spring MVC
Layui 的上传是最常用的, 不可或缺, 记录一下代码, 以后复制都能用!! 1.前端HTML: <div class="layui-form-item"> < ...
- HDU 6138 Fleet of the Eternal Throne(后缀自动机)
题意 题目链接 Sol 真是狗血,被疯狂卡常的原因竟是 我们考虑暴力枚举每个串的前缀,看他能在\(x, y\)的后缀自动机中走多少步,对两者取个min即可 复杂度\(O(T 10^5 M)\)(好假啊 ...
- 电脑黑屏,提示信息:windows 无法验证此文件的数字签名。
前言 前几天,在群聊里,有个发小@我,发了张截图,说电脑打不开机了,黑屏,说什么windows 无法验证此文件的数字签名.我当时发了个纠结的表情,意思是我不是专业修电脑的,为什么问我啊.她说怎么了,好 ...
- 【工具相关】Web-Sublime Text2-安装 Package Control
一,打开Sublime text2---->Preferences--->若Package Settings,Package Control,没有的话,就需要安装Package Contr ...
- PHP会话(Session)实现用户登陆功能 转自#落人间#
对比起 Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Session 的使用. 由于 Session 是以文本文件形式存储在 ...