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.
56 lines
1.0 KiB
56 lines
1.0 KiB
package crypto
|
|
|
|
import (
|
|
"bufio"
|
|
"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
|
|
}
|