Files
2026-07-03 15:58:29 +08:00

63 lines
1.3 KiB
Go

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
}