(Golang) JWT 签名验证问题
(Golang) JWT Signature Verification Issue
我正在尝试了解 Golang 中的 JWT 令牌。我正在使用 github.com/dgrijalva/jwt-go。
让我措手不及的是我可以输入多个有效签名。
例如,前往 http://jwt.io
- 输入 MySuperSecretKey 作为秘密
此令牌有效:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70DrvbQMlaU
还有这个:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70DrvbQMlaV
事实上,如果我将最后一个字母更改为 V、W 或 X,我会收到 "Signature Verfied" 消息。
谁能告诉我这是怎么回事?
是签名的Base64编码,可以在不影响相关位的情况下,将最后一个字母更改为某些目标。
尝试将两个签名都弹出到 base64->hex 解码器中,您会得到相同的结果。事实上,在 https://conv.darkbyte.ru/,两个签名都被重新评估为 base64 SxshVL42DUH9e7jXUblbBbTwKxhe4jo70DrvbQMlaQ==
我正在尝试了解 Golang 中的 JWT 令牌。我正在使用 github.com/dgrijalva/jwt-go。
让我措手不及的是我可以输入多个有效签名。
例如,前往 http://jwt.io - 输入 MySuperSecretKey 作为秘密
此令牌有效:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70DrvbQMlaU
还有这个:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70DrvbQMlaV
事实上,如果我将最后一个字母更改为 V、W 或 X,我会收到 "Signature Verfied" 消息。
谁能告诉我这是怎么回事?
是签名的Base64编码,可以在不影响相关位的情况下,将最后一个字母更改为某些目标。
尝试将两个签名都弹出到 base64->hex 解码器中,您会得到相同的结果。事实上,在 https://conv.darkbyte.ru/,两个签名都被重新评估为 base64 SxshVL42DUH9e7jXUblbBbTwKxhe4jo70DrvbQMlaQ==