package crypto import ( "bufio" "crypto/hmac" "crypto/md5" "encoding/hex" "fmt" "io" "os" "strings" ) // Md5Check md5 Check method func (c *Crypto) Md5Check(content, encrypted string) bool { return strings.EqualFold(c.Md5Encode(content), encrypted) } // Md5Encode md5 Signature function func (c *Crypto) Md5Encode(data string) string { h := md5.New() h.Write([]byte(data)) return hex.EncodeToString(h.Sum(nil)) } // Md5File return the md5 value of file func (c *Crypto) Md5EncodeFile(filename string) (string, error) { if fileInfo, err := os.Stat(filename); err != nil { return "", err } else if fileInfo.IsDir() { return "", nil } file, err := os.Open(filename) if err != nil { return "", err } defer file.Close() hash := md5.New() chunkSize := 65536 for buf, reader := make([]byte, chunkSize), bufio.NewReader(file); ; { n, err := reader.Read(buf) if err != nil { if err == io.EOF { break } return "", err } hash.Write(buf[:n]) } checksum := fmt.Sprintf("%x", hash.Sum(nil)) return checksum, nil } // Md5Hmac return the hmac hash of string use md5 func (c *Crypto) Md5Hmac(data, key string) string { h := hmac.New(md5.New, []byte(key)) h.Write([]byte(data)) return hex.EncodeToString(h.Sum([]byte(""))) }