我正在努力弄清Golang中的JWT token 。我正在使用github.com/dgrijalva/jwt-go

让我措手不及的是我可以输入多个有效签名的事实。

例如,Go http://jwt.io
-输入MySuperSecretKey作为 secret

该 token 有效:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70Drv

以及这个:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70Drv

实际上,如果我将最后一个字母更改为V,W或X,则会收到“签名已验证”消息。

谁能告诉我这是怎么回事?

最佳答案

它是签名的Base64编码,可以使最后一个字母更改为某些目标,而不影响相关位。

尝试将两个签名弹出到base64-> hex解码器中,您将获得相同的结果。实际上,在https://conv.darkbyte.ru/上,两个签名都被重新评估为base64 SxshVL42DUH9e7jXUblbBbTwKxhe4jo70DrvbQMlaQ ==

10-07 16:24
查看更多