Мне нужно сделать интеграцию с платформой. Платформа предоставила мне открытый ключ для шифрования данных для вызова их API. При отправке запроса мне нужно учитывать следующее:
- Запрос является запросом HTTPS / POST.
- Запрос должен быть таким:
{
Base64Encode(
RSA_Encrypt(
{ "a" : "111111", "b" : "12234", "c" : "2342342", "d" : "612413726581" }
)
)
}
Я помещаю параметры, как показано ниже:
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("a", "112227");
parameters.put("b", "5411");
parameters.put("c", "12345678");
parameters.put("d", "123456");
Шифрование, как показано ниже:
StringBuilder sb = new StringBuilder();
sb.append("{");
for (String parameterName : parameters.keySet()) {
sb.append("\""+parameterName+"\"").append(':').append("\""+parameters.get(parameterName)+"\"").append(',');
}
String s=sb.toString();
s=s.replaceAll(",\\Z", "");
s=s+"}";
byte[] cleartext = s.getBytes("UTF-8");
String path="Path to certificate file\\rsa_apikey.cer";
FileInputStream fin = new FileInputStream(filename);
CertificateFactory f;
PublicKey pk;
try {
f = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin);
pk = certificate.getPublicKey();
} catch (CertificateException e) {
e.printStackTrace();
}
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding");
cipher.init(Cipher.ENCRYPT_MODE, pk);
byte[] ciphertext=cipher.doFinal(cleartext);
String securePayload = Base64.getEncoder().encodeToString(ciphertext);
После этого я отправляю запрос POST. Запрос все еще показывает ошибку 400 неверных запросов. Я не знаю, правильно ли я это делаю.
Вопросg 1) Пожалуйста, предложите, каков наилучший способ сделать это?
Вопрос 2) Я каждый раз получаю строку base64 «securePayload» по-разному. Может ли это быть причиной плохого запроса?