go-md5-两种方式

 求md5主要有两种方式:
 1 has := md5.Sum(data); md5str1 := fmt.Sprintf("%x", has); 这种直接计算md5的值;
 2 w := md5.New(); w.Write([]byte{49, 50, 51, 52}); md5str2 := fmt.Sprintf("%x", w.Sum(nil)) 生成md5对象,然后根据io.Writer的接口往md5对象里写数据,再调用md5对象的Sum方法。
package main

import (
    "crypto/md5"
    "fmt"
    "io"
    "log"
    "os"
)

func main() {
    str := "abc1231234"



    //方法一 Sum
    data := []byte(str)
    has := md5.Sum(data)
    md5str1 := fmt.Sprintf("%x", has) //将[]byte转成16进制

    fmt.Println(md5str1) // output 6f1e11851fdf41fc304dab6eabb6cc24

    //方法二-1

    w := md5.New()

    io.WriteString(w, "abc123") //将str写入到w中
    w.Write([]byte{49, 50, 51, 52})
    md5str2 := fmt.Sprintf("%x", w.Sum(nil)) //w.Sum(nil)将w的hash转成[]byte格式
    fmt.Println(md5str2)                     // output 6f1e11851fdf41fc304dab6eabb6cc24

    // 方法二-2
    //data = append(data, 49, 50, 51, 52)
    md5Code := fmt.Sprintf("%x", md5.New().Sum(nil))
    fmt.Println(md5Code) // output d41d8cd98f00b204e9800998ecf8427e

    // 方法二-3  file md5
    currentPath, _ := os.Getwd()
    fileName := currentPath + string(os.PathSeparator) + "1.log"
    f, err := os.Open(fileName)
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()

    h := md5.New()
    if _, err := io.Copy(h, f); err != nil {
        log.Fatal(err)
    }

    fmt.Printf("file md5:%x\n", h.Sum(nil)) // output file md5:138208eb5bccb98b8212c4a7dfc64e65
}

你可能感兴趣的:(go-md5-两种方式)