解密具有加密值的JSON数据时出现BadPaddingException

时间:2020-10-15 17:13:04

标签: java json spring rest-client badpaddingexception

我有一个第三方API,必须以加密形式以JSON发送数据。 JSON中的数据如下所示:

{
    "encryptedKey": "rltP+oNBMx26wSpmvKZ91iL=",
    "encryptedData": "u5o+ON08CNGLwvt8OUmHXFPAzfk3uPILANA="
}

注意: json值中的数据被裁剪为仅显示示例。

我正在使用Java11HttpClient将此请求发送到给定的端点。带有所有加密值的请求得到了很好的处理,并且我得到了与请求相同的期望结果(响应再次出现在键值对JSON中,并且值已加密)。

{
    "encryptedKey": "rltP+oNmvKZ91iL=",
    "encryptedData": "u5ot8OUmHXFPAzfk3uPILANA="
}

我必须再次解密此JSON“ encryptedKey”以获取实际内容。使用“ RSA / ECB / PKCS1Padding”完成解密。因此,当我传递该cryptoKey的字符串来解密代码时,它会给我BadPaddingException。

javax.crypto.BadPaddingException: Decryption error
        at java.base/sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:378)
        at java.base/sun.security.rsa.RSAPadding.unpad(RSAPadding.java:290)
        at java.base/com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:366)
        at java.base/com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:392)
        at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2202)

我正在使用以下代码:

HttpRequest request = HttpRequest.newBuilder().POST(BodyPublishers.ofString(requestPayload))
                .uri(URI.create(url))
                .header("Content-Type", "application/json")
                .header("Accept", "application/json")
                .headers(buildHeaders(headers).toArray(String[]::new)).build();

HttpResponse响应= httpClient.send(请求, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));

上面的代码可以很好地用于请求,并以与预期相同的结构给我答复。但是问题似乎出在String响应反序列化的过程中。

选项2:当我选择从代码生成的加密请求时,如果将该请求添加为Postman中的有效负载,则会得到类似的响应。现在,如果我从Postman响应中解密该加密密钥,则使用相同的代码库,它将为我提供有效的数据,而无需填充异常。

需要在Spring或Java11等库中发送请求和处理响应数据的方式的建议。

到目前为止,我已经尝试了Unirest,Java11HttpClient和OkHttp,但结果相同。

谢谢。

0 个答案:

没有答案
相关问题