package user_test import ( "yunyan/lego/utils/crypto/aes" "fmt" "math/rand" "testing" "time" "github.com/golang-jwt/jwt/v4" ) func Test_Claims(t *testing.T) { claims := &jwt.RegisteredClaims{ Issuer: "Earphone", Subject: "Sgin", ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour * 24)), // 24 hours expiration NotBefore: jwt.NewNumericDate(time.Now()), IssuedAt: jwt.NewNumericDate(time.Now()), ID: "2010882799132737536", } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenString, err := token.SignedString([]byte("asd123adqeqwe")) if err != nil { t.Fatalf("Error signing token: %v", err) } fmt.Println("Generated Token:", tokenString) // Call the parse function to verify the token parsedClaims, err := ParseToken(tokenString, []byte("asd123adqeqwe")) if err != nil { t.Fatalf("Error parsing token: %v", err) } // Validate the claims if parsedClaims.Issuer != claims.Issuer { t.Errorf("Expected Issuer %v, got %v", claims.Issuer, parsedClaims.Issuer) } if parsedClaims.Subject != claims.Subject { t.Errorf("Expected Subject %v, got %v", claims.Subject, parsedClaims.Subject) } if parsedClaims.ID != claims.ID { t.Errorf("Expected ID %v, got %v", claims.ID, parsedClaims.ID) } } func ParseToken(tokenString string, secretKey []byte) (*jwt.RegisteredClaims, error) { parsedToken, err := jwt.ParseWithClaims(tokenString, &jwt.RegisteredClaims{}, func(token *jwt.Token) (interface{}, error) { // Ensure the token method conforms to "SigningMethodHMAC" if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"]) } return secretKey, nil }) if err != nil { return nil, err } // Validate the token and extract the claims if claims, ok := parsedToken.Claims.(*jwt.RegisteredClaims); ok && parsedToken.Valid { return claims, nil } else { return nil, fmt.Errorf("invalid token") } } // 生成随机大写字母授权码(无重复字符) func generateRandomCode(length int) string { // 定义大写字母集合 const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // 初始化随机种子 rand.Seed(time.Now().UnixNano()) // 打乱字母顺序 shuffled := []rune(letters) rand.Shuffle(len(shuffled), func(i, j int) { shuffled[i], shuffled[j] = shuffled[j], shuffled[i] }) // 取前 length 个字符 return string(shuffled[:length]) } func Test_CBC(t *testing.T) { token := aes.AesEncryptCBC("+8613536758045", "gDSiGlKJIGuu84ZNe+j4FQ==") phone := aes.AesDecryptCBC(token, "gDSiGlKJIGuu84ZNe+j4FQ==") fmt.Println(token, phone) }