gitee.com/h79/goutils@v1.22.10/common/file/md5.go (about)

     1  package file
     2  
     3  import (
     4  	"crypto/md5"
     5  	"fmt"
     6  	"io"
     7  	"os"
     8  )
     9  
    10  func MD5(filename string) string {
    11  	file, err := os.Open(filename)
    12  	defer file.Close()
    13  	if err != nil {
    14  		return ""
    15  	}
    16  	return MD5Reader(file)
    17  }
    18  
    19  func MD5Byte(src io.Reader) []byte {
    20  	by, _ := MD5ByteSize(src)
    21  	return by
    22  }
    23  
    24  // MD5ByteSize return md5 bytes and file's size
    25  func MD5ByteSize(src io.Reader) ([]byte, int64) {
    26  	hash := md5.New()
    27  	ll, err := io.Copy(hash, src)
    28  	if err != nil {
    29  		return []byte{}, ll
    30  	}
    31  	return hash.Sum(nil), ll
    32  }
    33  
    34  func MD5Reader(src io.Reader) string {
    35  	return fmt.Sprintf("%x", MD5Byte(src))
    36  }
    37  
    38  // MD5Size return md5 hex(32) and file's size
    39  func MD5Size(src io.Reader) (string, int64) {
    40  	has, ll := MD5ByteSize(src)
    41  	return fmt.Sprintf("%x", has), ll
    42  }