我正试图在Golang中了解JWT令牌.我正在使用github.com/dgrijalva/jwt-go.
让我措手不及的是我可以输入多个有效签名.
例如,转到http://jwt.io - 输入MySuperSecretKey以获取密码
此令牌有效:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70DrvbQMlaU
以及这一个:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70DrvbQMlaV
事实上,如果我将最后一个字母更改为V,W或X,我会收到"Signature Verfied"消息.
谁能告诉我这里发生了什么?
1> davidkomer..:
它是签名的Base64编码,可以将最后一个字母更改为某些目标,而不会影响相关位.
尝试将两个签名弹出到base64->十六进制解码器中,您将获得相同的结果.事实上,在https://conv.darkbyte.ru/,两个签名都被重新评估为base64 SxshVL42DUH9e7jXUblbBbTwKxhe4jo70DrvbQMlaQ ==