Rem*_*lok 2 base64 digital-signature hmac jwt
我的应用程序正在使用 JWT,应该可以防止重放攻击。我正在测试这个并遇到以下问题。
当我有一个有效的 JWT 并更改令牌/签名的最后一个字符时,JWT 仍然有效。例如,以下令牌都正确验证:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r4
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r5
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r6
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r7
我已经在http://jwt.io/上检查过这个,也可以在我的 .Net 应用程序中复制。
有人能解释一下签名对于给定的有效载荷是如何可能不是唯一的吗?我知道可能会发生碰撞,但我无法解释它们是连续的序列。
在这种特殊情况下,您正在更改签名的 base64 url 编码,而不是签名本身
第四个 base64 值编码相同的二进制值。尝试在http://kjur.github.io/jsjws/tool_b64udec.html转换为十六进制
您将看到的值是
52415848aee14927a2a9439231d6d781b384acc167b8ad049a4d7bdb69f2fabe
Run Code Online (Sandbox Code Playgroud)
如果将后缀更改为-r1or-r8则二进制值更改并且签名验证将失败
如果解码,两个不同的 BASE 64 编码字符串是否可以生成相同的字符串?
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |