#java #base64 #sha1
Вопрос:
У меня возникли некоторые проблемы с получением правильной строки в кодировке base64 с помощью java.
Это строка, которую необходимо закодировать: " POSTnmBAcWORUK93FBOz6jsAuqw==napplication/jsonnFri, 26 Jul 2019 06:00:46 GMTn/v1/api/userStationList"
Это секретный ключ: 6680182547
И мой код:
public static String HmacSHA1Encrypt(String encryptText, String keySecret) throws Exception
{
byte[] data= keySecret.getBytes("UTF-8");
SecretKey secretKey = new SecretKeySpec(data, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretKey);
byte[] text = encryptText.getBytes("UTF-8");
byte[] result = mac.doFinal(text);
return Base64.getEncoder().encodeToString(result);
}
Называю это:
String test = HmacSHA1Encrypt(" POSTnmBAcWORUK93FBOz6jsAuqw==napplication/jsonnFri, 26 Jul 2019 06:00:46 GMTn/v1/api/userStationList", "6680182547");
Я следую некоторым документам api, и я должен получить /2Np3q5h846q9cWEFUNtbL G7H8=
, но вместо этого я получаю 4eiwJAFKXqrj4xvetzKUCodrNqI=
Есть идеи, что не правильно?
Комментарии:
1. Начальный пробел в строке предназначен и существует также в образце из документов?
2. Да, насколько я могу судить, добавил снип выше.
3. не могли бы вы предоставить ссылку на документы?
4. Не существует в Интернете, был отправлен только pdf-файл, но я загрузил его hre: smallpdf.com/…
5. Я думаю, вы неправильно поняли кое-что из PDF. В нем говорится, что:
The calculation result of Content-MD5 of "{"userId":"1145611319416590338"}" in the example is: mBAcWORUK93FBOz6jsAuqw==
и в пункте 2.2.4 написано POSTn mBAcWORUK93FBOz6jsAuqw== …. Я имею в виду, что «результат», который должен быть получен, действительно записан в строке подписи. Поэтому я думаю, что проблема здесь в том, что то, что передается методу в качествеencryptText
аргумента, — это не то, что вы должны передавать.