JWT全称是JSON Web Token。
通俗地说,JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输。
JWT由3部分组成:标头(Header)、有效载荷(Payload)和签名(Signature)。在传输的时候,会将JWT的3部分分别进行Base64编码后用.进行连接形成最终传输的字符串
JWTString = Base64(Header).Base64(Payload).HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)
这里只需要注意访问的是/admin/而不是/admin因为访问/admin表示访问admin.php而访问/admin/表示访问的是admin目录下默认的
在写到web349的时候有一个rsa-sha256加密
RS256和HS256是两种不同的签名算法,通常用于验证JSON Web Tokens(JWTs)的完整性和真实性。JWT是一种用于在网络应用程序之间安全传输信息的标准格式。
-
RS256(RSA-SHA256):
- RS256使用RSA非对称加密算法来创建和验证JWT的签名。
- 这种算法使用一对公钥和私钥。私钥用于创建JWT的签名,而公钥用于验证签名。
- 由于使用RSA,它提供了更高的安全性,因为私钥只保留在JWT的签发者一侧,只有签发者可以创建有效的签名。
- RS256通常用于保护敏感信息,如身份验证令牌。
在 RS256 中:
- 私钥由 JWT 的签发者(通常是服务器)持有,并用于创建 JWT 的数字签名。
- 公钥由 JWT 的验证者(通常是客户端)持有,并用于验证 JWT 的数字签名的有效性。
- 简而言之,RS256 主要用于验证 JWT 的完整性和真实性,而不是对 JWT 的内容进行加密
-
HS256(HMAC-SHA256):
- HS256使用HMAC(基于散列的消息认证码)和SHA-256散列函数来创建和验证JWT的签名。
- 这种算法使用共享密钥(秘密密钥)来创建和验证签名,这意味着签发者和验证者都必须知道共享密钥。
- 由于共享密钥的使用,HS256适用于只有一个实体(通常是服务器)签发和验证JWT的情况。
- HS256通常用于保护不太敏感的信息,如会话令牌或API密钥。
总之,RS256和HS256都是JWT签名算法,但它们使用不同的加密机制。RS256更适合在多个实体之间传递JWT,并提供更高的安全性,而HS256适合在单一实体之间传递JWT,并提供足够的安全性来验证令牌的完整性。
参考博客:Ctfshow web入门 JWT篇 web345-web350 详细题解 全_Jay 17的博客-CSDN博客