package auth import ( "crypto/aes" "crypto/cipher" "encoding/hex" "log" "net/url" "testing" "time" "github.com/golang-jwt/jwt" ) func BenchmarkConfirmationLink(b *testing.B) { type Register struct { Id int64 Password string platform string Expired time.Time } key := "21321321" cl := NewConfirmationLink[Register](key, "http://localhost:9900/api/auth/oauth2/register") for i := 0; i < b.N; i++ { uri, _ := cl.Generate(&Register{Id: 39, Password: "21dsadsad", platform: "google", Expired: time.Now().UTC()}) u, _ := url.Parse(uri) token := u.Query()["token"] cl.Decrypt(token[0]) } } func BenchmarkAesXor(b *testing.B) { // 生成一个256位的密钥 key := []byte("abcdefghijklmnopqrstuvwxyz123456") // // 初始向量IV必须是唯一的,但不需要保密 iv := []byte("1234567890123456") // // 要加密的明文 plaintext := []byte("hello world sadsadsadssadadsada ") // // 使用AES加密,返回一个Block接口 // block, err := aes.NewCipher(key) // if err != nil { // panic(err) // } // // 使用CTR模式 // stream := cipher.NewCTR(block, iv) // // 加密明文 // ciphertext := make([]byte, len(plaintext)) // stream.XORKeyStream(ciphertext, plaintext) // // 转为hex编码打印出来 // // fmt.Println(hex.EncodeToString(ciphertext)) // ciphertextHex := hex.EncodeToString(ciphertext) // // 将hex解码成[]byte // ciphertext, _ = hex.DecodeString(ciphertextHex) // // 生成Block接口 // block, err = aes.NewCipher(key) // if err != nil { // panic(err) // } // // 生成CTR模式 // stream = cipher.NewCTR(block, iv) // // 解密密文 // plaintext = make([]byte, len(ciphertext)) // stream.XORKeyStream(plaintext, ciphertext) // // 打印明文 // fmt.Println(string(plaintext)) for i := 0; i < b.N; i++ { // 使用AES加密,返回一个Block接口 block, err := aes.NewCipher(key) if err != nil { panic(err) } // 使用CTR模式 stream := cipher.NewCTR(block, iv) // 加密明文 ciphertext := make([]byte, len(plaintext)) stream.XORKeyStream(ciphertext, plaintext) // 转为hex编码打印出来 // fmt.Println(hex.EncodeToString(ciphertext)) ciphertextHex := hex.EncodeToString(ciphertext) // 将hex解码成[]byte ciphertext, _ = hex.DecodeString(ciphertextHex) // 生成Block接口 block, err = aes.NewCipher(key) if err != nil { panic(err) } // 生成CTR模式 stream = cipher.NewCTR(block, iv) // 解密密文 plaintext = make([]byte, len(ciphertext)) stream.XORKeyStream(plaintext, ciphertext) } } func TestConfirmationLink(t *testing.T) { type Register struct { Id int64 Password string platform string Expired time.Time } key := "21321321" cl := NewConfirmationLink[Register](key, "http://localhost:9900/api/auth/oauth2/register") uri, _ := cl.Generate(&Register{Id: 39, Password: "21dsadsad", platform: "google", Expired: time.Now().UTC()}) log.Println(uri) u, _ := url.Parse(uri) token := u.Query()["token"] log.Println(cl.Decrypt(token[0])) } const secret = "your-256-bit-secret" func BenchmarkJWT(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { claims := &jwt.StandardClaims{ ExpiresAt: time.Now().UTC().Unix() + 1020213021, Issuer: "test", } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) ss, err := token.SignedString([]byte(secret)) if err != nil { b.Fatal(err) } _, err = jwt.Parse(ss, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, jwt.ErrSignatureInvalid } return []byte(secret), nil }) if err != nil { b.Fatal(err) } } }