Skip to content
This repository has been archived by the owner on May 9, 2023. It is now read-only.

Latest commit

 

History

History
183 lines (119 loc) · 2.94 KB

File metadata and controls

183 lines (119 loc) · 2.94 KB

Go语言实现散列函数

[toc]

1. Go中使用MD5

需要的包

官网上查看md5的包https://studygolang.com/pkgdoc

func Sum

func Sum(data []byte) [Size]byte

返回数据data的MD5校验和。

Example:

data := []byte("These pretzels are making me thirsty.")
fmt.Printf("%x", md5.Sum(data))

Output:

b0804ec967f48520697662a204f5fe72

func New

func New() hash.Hash

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

Example

h := md5.New()
io.WriteString(h, "The fog is getting thicker!")
io.WriteString(h, "And Leon's getting laaarger!")
fmt.Printf("%x", h.Sum(nil))

Output:

e2c569be17396eca2a2e3c11578123ed

代码

package hash

import (
	"crypto/md5"
	"encoding/hex"
	. "fmt"
	"io"
)

func GetMd5Str(src []byte) string {
	//1. 给hash算法添加数据
	res := md5.Sum(src)
	myres := Sprintf("%x", res)
	//1.对代码的值进行格式化操作
	return myres
}

//第二种方式
func GetMd5Str_2(src []byte) string {
	//1.创建一个hash接口
	hash := md5.New()
	//2. 添加数据
	io.WriteString(hash, string(src))
	// io.WriteString(hash, string(src))
	//3.计算结果
	res := hash.Sum(nil)
	//4.散列值格式化
	return hex.EncodeToString(res)
}

上面的两种方法对比:

  • 第一个方法虽然简单,但是添加数据只能添加一次
  • 第二种方法可以添加多个值,添加多次数据

测试代码

func HashTest() {
	data := []byte("welcome to wuhan")
	fmt.Println("data: ", data)
	fmt.Println("Generator: ", hash.GetMd5Str(data))
	fmt.Println("Generator: ", hash.GetMd5Str_2(data))
	// rsa.GenerateRSAKey()
}

2. Go使用SHA-1

需要的包

Constants

const BlockSize = 64

SHA1的块大小。

const Size = 20

SHA1校验和的字节数。

func Sum

func Sum(data []byte) [Size]byte

返回数据data的SHA1校验和。

Example

data := []byte("This page intentionally left blank.")
fmt.Printf("% x", sha1.Sum(data))

Output:

af 06 49 23 bb f2 30 15 96 aa c4 c2 73 ba 32 17 8e bc 4a 96

func New

func New() hash.Hash

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

Example

h := sha1.New()
io.WriteString(h, "His money is twice tainted:")
io.WriteString(h, " 'taint yours and 'taint mine.")
fmt.Printf("% x", h.Sum(nil))

Output:

59 7f 6a 54 00 10 f9 4c 15 d7 18 06 a9 9a 2c 87 10 e7 47 bd

代码