You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.2 KiB

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("")))
}