在 JavaScript 中创建压缩的 JWT 负载
Creating Compressed JWT Payload in JavaScript
我有一个函数可以将压缩的 JWT 有效负载解析为 JSON。该功能的工作方式对我来说很有意义。我想创建一个可以做完全相反的函数:获取一个 JSON 对象并将其转换为 COMPRESSED JWT Payload.
解析解压函数:
function parseJwtPayload(payload) {
const buffer = Buffer.from(payload, "base64");
const payloadJson = zlib.inflateRawSync(buffer);
return JSON.parse(payloadJson);
}
...输出 JSON.
...输入 JSON。
我尝试创建有效载荷并压缩它的函数:
function makeJwtPayload(json) { // Where json is a String from JSON.stringify().
const buffer = Buffer.from(json, 'utf8');
var payload = zlib.deflateRawSync(buffer).toString('base64');
payload = payload.replace(/=+$/, '');
payload = payload.replace(/\+/g, '-');
payload = payload.replace(/\//g, '_');
return payload;
}
现在这个函数可以工作了,因为压缩的编码字符串可以在原始函数中使用并解码,它会继续输出相同的 JSON 对象。但是当重新编码时,Base64 字符串看起来不一样了。它比原来的更长,只有一些字符保持一致。
如果您能够解压并准确获取原始有效负载,那么您没有问题。永远不能保证解压缩压缩会给你同样的东西。唯一的保证是 compress-decompress 会给你同样的东西。
同一个数据的压缩方式有很多种,同一个压缩代码不同的设置,不同版本的压缩代码相同的设置,或者只是不同的压缩代码,都可以对同一个压缩包给出不同的压缩输出数据。不知道什么版本的压缩代码和什么设置使您收到了什么,而且您不太可能能够准确地重建它。而且没有理由也不需要。
如果您想再压缩一点,请将 deflateRawSync
的 level
选项设置为 9
。
我有一个函数可以将压缩的 JWT 有效负载解析为 JSON。该功能的工作方式对我来说很有意义。我想创建一个可以做完全相反的函数:获取一个 JSON 对象并将其转换为 COMPRESSED JWT Payload.
解析解压函数:
function parseJwtPayload(payload) {
const buffer = Buffer.from(payload, "base64");
const payloadJson = zlib.inflateRawSync(buffer);
return JSON.parse(payloadJson);
}
...输出 JSON.
...输入 JSON。 我尝试创建有效载荷并压缩它的函数:
function makeJwtPayload(json) { // Where json is a String from JSON.stringify().
const buffer = Buffer.from(json, 'utf8');
var payload = zlib.deflateRawSync(buffer).toString('base64');
payload = payload.replace(/=+$/, '');
payload = payload.replace(/\+/g, '-');
payload = payload.replace(/\//g, '_');
return payload;
}
现在这个函数可以工作了,因为压缩的编码字符串可以在原始函数中使用并解码,它会继续输出相同的 JSON 对象。但是当重新编码时,Base64 字符串看起来不一样了。它比原来的更长,只有一些字符保持一致。
如果您能够解压并准确获取原始有效负载,那么您没有问题。永远不能保证解压缩压缩会给你同样的东西。唯一的保证是 compress-decompress 会给你同样的东西。
同一个数据的压缩方式有很多种,同一个压缩代码不同的设置,不同版本的压缩代码相同的设置,或者只是不同的压缩代码,都可以对同一个压缩包给出不同的压缩输出数据。不知道什么版本的压缩代码和什么设置使您收到了什么,而且您不太可能能够准确地重建它。而且没有理由也不需要。
如果您想再压缩一点,请将 deflateRawSync
的 level
选项设置为 9
。