mirror of https://gitee.com/godoos/godoos.git
71 lines
1.8 KiB
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
|
|
}
|
|
|