情境:
我正在阅读此链接(https://medium.com/vandium-software/5-easy-steps-to-understanding-json-web-tokens-jwt-1164c0adfcec)中有关 JSON Web Tokens 的内容。它概述了如何创建 JSON Web Token,您需要创建一个标头和负载,然后使用以下伪代码创建签名:
data = base64urlEncode( header ) + “.” + base64urlEncode( payload )
hashedData = hash( data, secret )
signature = base64urlEncode( hashedData )
我的问题:
为什么伪代码在创建data
和signature
时使用base64urlEncode
?
我目前了解的范围:
Base64允许您使用64个文本字符集中的文本字符来表示二进制数据。这通常用于当您有一组数据要通过某些可能会误解一些字符但不会误解Base64字符的渠道进行传递时,您使用Base64对其进行编码,以便数据不会被误解。另一方面,Base64 URL编码类似于Base64编码,只是使用了一组不包括URL中具有特殊含义的字符的Base64字符子集,因此,如果您在URL中使用Base64 URL编码字符串,则其含义不会被误解。
假设我对此的理解是正确的,我想要了解为什么在上述伪代码中计算data
和signature
时使用base64urlEncode()
。 JSON Web Token的签名将在URL中使用吗?如果是这样,为什么要对data
进行base64urlEncode
然后再进行哈希处理。为什么不只对签名进行编码?哈希函数是否需要其data
参数进行Base64 URL编码?