Some checks failed
Build docker and publish / build (20.15.1) (push) Has been cancelled
refactor: 重构用户模型和密码验证逻辑 feat(epay): 添加支付类型支持 docs: 添加安装和配置指南文档 fix: 修复优惠券过期检查逻辑 perf: 优化设备解绑缓存清理流程 test: 添加密码验证测试用例 chore: 更新依赖版本
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package tool
|
||
|
||
import (
|
||
"crypto/md5"
|
||
"crypto/sha256"
|
||
"crypto/sha512"
|
||
"encoding/hex"
|
||
"fmt"
|
||
"strings"
|
||
|
||
"github.com/anaskhan96/go-password-encoder"
|
||
"golang.org/x/crypto/bcrypt"
|
||
)
|
||
|
||
var options = &password.Options{SaltLen: 16, Iterations: 100, KeyLen: 32, HashFunction: sha512.New}
|
||
|
||
func EncodePassWord(str string) string {
|
||
salt, encodedPwd := password.Encode(str, options)
|
||
newPassword := fmt.Sprintf("$pbkdf2-sha512$%s$%s", salt, encodedPwd)
|
||
return newPassword
|
||
}
|
||
|
||
func VerifyPassWord(passwd, EncodePasswd string) bool {
|
||
info := strings.Split(EncodePasswd, "$")
|
||
return password.Verify(passwd, info[2], info[3], options)
|
||
}
|
||
|
||
func Md5Encode(str string, isUpper bool) string {
|
||
sum := md5.Sum([]byte(str))
|
||
res := hex.EncodeToString(sum[:])
|
||
//转大写,strings.ToUpper(res)
|
||
if isUpper {
|
||
res = strings.ToUpper(res)
|
||
}
|
||
return res
|
||
}
|
||
|
||
func MultiPasswordVerify(algo, salt, password, hash string) bool {
|
||
switch algo {
|
||
case "md5":
|
||
sum := md5.Sum([]byte(password))
|
||
return hex.EncodeToString(sum[:]) == hash
|
||
case "sha256":
|
||
sum := sha256.Sum256([]byte(password))
|
||
return hex.EncodeToString(sum[:]) == hash
|
||
case "md5salt":
|
||
sum := md5.Sum([]byte(password + salt))
|
||
return hex.EncodeToString(sum[:]) == hash
|
||
case "default": // PPanel's default algorithm
|
||
return VerifyPassWord(password, hash)
|
||
case "bcrypt":
|
||
// Bcrypt (corresponding to PHP's password_hash/password_verify)
|
||
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
|
||
return err == nil
|
||
}
|
||
return false
|
||
}
|