JWT 的 Payload Private Claim Value 中二进制数据的高效存储
Efficient storage of binary data in JWT's Payload Private Claim Value
我需要将 byte[]
有效地存储到 JWT claim 值中,特别是 .
有什么比将 byte[]
转换为 base64URL 更有效的方法吗?
即
Microsoft.AspNetCore.WebUtilities.Base64UrlTextEncoder.Encode(arrToEnc);
最终目标是对 List<UInt16>
进行编码,使每个 UInt16
最多为 2 个字节(在正常 JWT 解码后)。
考虑 byte[]
-> UTF8 字符串。即 System.Text.Encoding.UTF8.GetString(arrToEnc);
这与 JWT 通常使用 Base64 对其进行编码的方式完全不同...
谢谢..
Base64 增加了 33℅ 开销,但可能会更少,具体取决于内容。另一种选择是 base85,但它只比 base64 提高了 7℅,并不常见,实现也不支持它。如果您控制编码器和解码器,这不是问题。
参见 Binary Data in JSON String. Something better than Base64
您可以压缩内容。 base64 的最坏情况是 33℅,zip 得到的压缩率大约是 30-40℅,但是 JWT 会在压缩时进行额外的 base64 编码,所以即使使用 base85,你也会对所需的比率产生过载1:1
您还可以将 gzip 添加到您的服务器,然后压缩率将应用于完整的 JWT 内容
我需要将 byte[]
有效地存储到 JWT claim 值中,特别是 .
有什么比将 byte[]
转换为 base64URL 更有效的方法吗?
即
Microsoft.AspNetCore.WebUtilities.Base64UrlTextEncoder.Encode(arrToEnc);
最终目标是对 List<UInt16>
进行编码,使每个 UInt16
最多为 2 个字节(在正常 JWT 解码后)。
考虑 byte[]
-> UTF8 字符串。即 System.Text.Encoding.UTF8.GetString(arrToEnc);
这与 JWT 通常使用 Base64 对其进行编码的方式完全不同...
谢谢..
Base64 增加了 33℅ 开销,但可能会更少,具体取决于内容。另一种选择是 base85,但它只比 base64 提高了 7℅,并不常见,实现也不支持它。如果您控制编码器和解码器,这不是问题。 参见 Binary Data in JSON String. Something better than Base64
您可以压缩内容。 base64 的最坏情况是 33℅,zip 得到的压缩率大约是 30-40℅,但是 JWT 会在压缩时进行额外的 base64 编码,所以即使使用 base85,你也会对所需的比率产生过载1:1
您还可以将 gzip 添加到您的服务器,然后压缩率将应用于完整的 JWT 内容