feat(encryption): add MultiPasswordVerify function for multiple hashing algorithms

This commit is contained in:
Chang lue Tsen 2025-10-08 12:19:41 -04:00
parent a273f8d883
commit de4386ff68
2 changed files with 34 additions and 1 deletions

View File

@ -2,12 +2,14 @@ package tool
import ( import (
"crypto/md5" "crypto/md5"
"crypto/sha256"
"crypto/sha512" "crypto/sha512"
"encoding/hex" "encoding/hex"
"fmt" "fmt"
"strings" "strings"
"github.com/anaskhan96/go-password-encoder" "github.com/anaskhan96/go-password-encoder"
"golang.org/x/crypto/bcrypt"
) )
var options = &password.Options{SaltLen: 16, Iterations: 100, KeyLen: 32, HashFunction: sha512.New} var options = &password.Options{SaltLen: 16, Iterations: 100, KeyLen: 32, HashFunction: sha512.New}
@ -32,3 +34,26 @@ func Md5Encode(str string, isUpper bool) string {
} }
return 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":
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
}

View File

@ -1,7 +1,15 @@
package tool package tool
import "testing" import (
"testing"
)
func TestEncodePassWord(t *testing.T) { func TestEncodePassWord(t *testing.T) {
t.Logf("EncodePassWord: %v", EncodePassWord("")) t.Logf("EncodePassWord: %v", EncodePassWord(""))
} }
func TestMultiPasswordVerify(t *testing.T) {
pwd := "$2y$10$WFO17pdtohfeBILjEChoGeVxpDG.u9kVCKhjDAeEeNmCjIlj3tDRy"
status := MultiPasswordVerify("", "", "admin", pwd)
t.Logf("MultiPasswordVerify: %v", status)
}