package utils import ( "crypto/md5" "crypto/sha256" "encoding/hex" "io" "os" "golang.org/x/crypto/bcrypt" ) // HashPassword 使用bcrypt对密码进行哈希 func HashPassword(password string) (string, error) { bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) return string(bytes), err } // CheckPassword 验证密码是否匹配 func CheckPassword(password, hash string) bool { err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) return err == nil } // MD5Hash 计算字符串的MD5值 func MD5Hash(text string) string { hash := md5.Sum([]byte(text)) return hex.EncodeToString(hash[:]) } // FileMD5 计算文件的MD5值 // 用于秒传判断: 相同MD5的文件只需存储一份 func FileMD5(filePath string) (string, error) { file, err := os.Open(filePath) if err != nil { return "", err } defer file.Close() hash := md5.New() if _, err := io.Copy(hash, file); err != nil { return "", err } return hex.EncodeToString(hash.Sum(nil)), nil } // FileSHA256 计算文件的SHA256值 func FileSHA256(filePath string) (string, error) { file, err := os.Open(filePath) if err != nil { return "", err } defer file.Close() hash := sha256.New() if _, err := io.Copy(hash, file); err != nil { return "", err } return hex.EncodeToString(hash.Sum(nil)), nil }