Raj*_*ran 0 java deflate typescript pako raw
我正在尝试使用 Deflater.class 对 Java 中的 JSON 字符串进行原始压缩。但是java和typescript生成的压缩结果有一些区别。
let bodyString = JSON.stringify(idTokenPayload);
const fields = deflate ? { zip: 'DEF' } : {};
const body = deflate ? pako.deflateRaw(bodyString) : bodyString;
Run Code Online (Sandbox Code Playgroud)
在爪哇,
protected String deflateAndBase64Encode(String jsonString) {
try {
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION, true);
DeflaterOutputStream deflaterStream = new DeflaterOutputStream(bytesOut, deflater);
deflaterStream.write(jsonString.getBytes());
deflaterStream.finish();
return Base64.getEncoder().encodeToString(bytesOut.toByteArray());
} catch (IOException e) {
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
更新:
我需要按如下方式转换 JSON 有效负载以生成智能健康卡。Json Payload -> Minified JSON -> Raw deflate -> 使用 ES256 alg 进行 JWS 签名 目前,这些示例仅在 javascript 中可用,运行良好。但是 java 应用程序中生成的任何内容在验证程序应用程序中都会失败。
async signJws(idTokenPayload: Record<string, unknown>, deflate = true): Promise<string> {
let bodyString = JSON.stringify(idTokenPayload);
const fields = deflate ? { zip: 'DEF' } : {};
const body = deflate ? pako.deflateRaw(bodyString) : bodyString;
let b64 = Buffer.from(body).toString('base64');
const signed = await jose.JWS.createSign({ format: 'compact', fields }, this.signingKey)
.update(Buffer.from(body))
.final();
return (signed as unknown) as string;
}
}
Run Code Online (Sandbox Code Playgroud)
在爪哇,
private String signPayload(String deflatedString, int index) {
JwsHeaders jsHeaders = new JwsHeaders(SignatureAlgorithm.ES256);
InputStream is = getClass().getClassLoader().getResourceAsStream("issuer.jwks.private.json");
JsonWebKeys keySet;
try {
keySet = JwkUtils.readJwkSet(is);
JsonWebKey key = keySet.getKeys().get(index);
jsHeaders.setProperty("zip", "DEF");
jsHeaders.setProperty("kid", key.getKeyId());
JwsCompactProducer jwsJsonProducer = new JwsCompactProducer(jsHeaders, deflatedString);
String signed = jwsJsonProducer.signWith(key);
return signed;
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
这通常是按预期工作的。
有许多压缩的字节字符串会膨胀回相同的输出。两个平减器没有特定义务产生相同的输出。在某种程度上,您正在通过配置BEST_COMPRESSION.
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |