71 lines
1.8 KiB

package utils
import (
"crypto/md5"
"crypto/rand"
"crypto/sha256"
"encoding/base64"
"encoding/hex"
"fmt"
r "math/rand"
"regexp"
"time"
)
// generateSalt 生成随机盐
func GenerateSalt(length int) (string, error) {
b := make([]byte, length)
_, err := rand.Read(b)
if err != nil {
return "", err
}
return base64.URLEncoding.EncodeToString(b), nil
}
// GenerateRandomSixDigitNumber 生成一个6位的随机正整数
func GenerateRandomSixDigitNumber() string {
return fmt.Sprintf("%06v", r.New(r.NewSource(time.Now().UnixNano())).Int31n(1000000))
}
// hashPassword 生成哈希密码
func HashPassword(password, salt string) string {
hash := sha256.New()
hash.Write([]byte(password + salt))
return base64.URLEncoding.EncodeToString(hash.Sum(nil))
}
func StringToMD5(src string) string {
m := md5.New()
m.Write([]byte(src))
res := hex.EncodeToString(m.Sum(nil))
return res
}
// IsEmail 校验邮箱格式
func IsEmail(email string) bool {
// 正则表达式匹配邮箱格式
re := regexp.MustCompile(`^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$`)
return re.MatchString(email)
}
// HashAndMD5 先使用SHA-256对输入字符串进行哈希,然后将结果进行MD5加密
func HashAndMD5(input string) (string, error) {
// 使用SHA-256进行哈希
sha256Hash := sha256.New()
if _, err := sha256Hash.Write([]byte(input)); err != nil {
return "", err
}
sha256Result := sha256Hash.Sum(nil)
// 将SHA-256的结果转换为字符串形式
sha256String := hex.EncodeToString(sha256Result)
// 对SHA-256的结果再次使用MD5进行哈希
md5Hash := md5.New()
if _, err := md5Hash.Write([]byte(sha256String)); err != nil {
return "", err
}
md5Result := md5Hash.Sum(nil)
// 返回最终的MD5哈希值
return hex.EncodeToString(md5Result), nil
}