github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/xhash/hash.go (about) 1 package xhash 2 3 import ( 4 "crypto/md5" 5 "crypto/sha1" 6 "crypto/sha256" 7 "fmt" 8 "io" 9 "os" 10 11 "github.com/codingeasygo/util/xio" 12 ) 13 14 func MD5(data []byte) string { 15 h := md5.New() 16 h.Write(data) 17 return fmt.Sprintf("%x", h.Sum(nil)) 18 } 19 20 func SHA1(data []byte) string { 21 h := sha1.New() 22 h.Write(data) 23 return fmt.Sprintf("%x", h.Sum(nil)) 24 } 25 26 func SHA256(data []byte) string { 27 h := sha256.New() 28 h.Write(data) 29 return fmt.Sprintf("%x", h.Sum(nil)) 30 } 31 32 func SHA512(data []byte) string { 33 h := sha256.New() 34 h.Write(data) 35 return fmt.Sprintf("%x", h.Sum(nil)) 36 } 37 38 func ReaderHash(reader io.Reader, enableSHA1, enableMD5 bool) (shah, md5h string, filesize int64, err error) { 39 h1 := sha1.New() 40 writer := []io.Writer{} 41 if enableSHA1 { 42 writer = append(writer, h1) 43 } 44 h2 := md5.New() 45 if enableMD5 { 46 writer = append(writer, h2) 47 } 48 filesize, err = xio.CopyMulti(writer, reader) 49 if enableSHA1 { 50 shah = fmt.Sprintf("%x", h1.Sum(nil)) 51 } 52 if enableMD5 { 53 md5h = fmt.Sprintf("%x", h2.Sum(nil)) 54 } 55 return 56 } 57 58 func FileHash(filename string, enableSHA1, enableMD5 bool) (shah, md5h string, filesize int64, err error) { 59 f, err := os.Open(filename) 60 if err == nil { 61 shah, md5h, filesize, err = ReaderHash(f, enableSHA1, enableMD5) 62 f.Close() 63 } 64 return 65 }