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
- java中import static和import的区别【转】
转自:http://blog.csdn.net/ygc87/article/details/7371254
- docker swarm 搭建及跨主机网络互连案例分析
准备工作 安装docker,不建议直接使用Docker官方的yum install docker wget http://yum.dockerproject.org/repo/main/centos/ ...
- 初学HTML-7
表单中的一些标签 label标签:让文字和输入框进行绑定,即,点击文字,输入框可以开始输入(默认文字和输入框没有关系,不会聚焦) 格式:<form action=""> ...
- NoHttp封装--01
NoHttpActivity public class NoHttpActivity extends Activity implements View.OnClickListener { privat ...
- Ubuntu18.04 安装mysql8.0.11
1.下载deb包 2.运行命令 sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb sudo apt update 3.安装mysql8 sudo apt i ...
- 利用奇异值分解(SVD)进行图像压缩-python实现
首先要声明,图片的算法有很多,如JPEG算法,SVD对图片的压缩可能并不是最佳选择,这里主要说明SVD可以降维 相对于PAC(主成分分析),SVD(奇异值分解)对数据的列和行都进行了降维,左奇异矩阵可 ...
- JVM内核优化
1.垃圾回收器 JVM垃圾回收器有串行和并行两种. 1.1 Serial收集器(串行,单线程),现在使用较少 Serial一般收集新生代 SerialOld一般收集老年代(采用标记压缩算法) 1.2 ...
- 【redis专题(3)】命令语法介绍之link
通过链表结构可以模仿队列结构与堆栈结构:关于队列结构和堆栈结构可以查看https://www.zybuluo.com/a5635268/note/290475 增 lpush key value1 v ...
- [20171120]关于INBOUND_CONNECT_TIMEOUT设置.txt
[20171120]关于INBOUND_CONNECT_TIMEOUT设置.txt --//上午翻看以前我的发的帖子,发现链接:http://www.itpub.net/thread-2066758- ...