[toc]
官网上查看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()
}
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