Метод getBytes () работает должным образом в Windows (Java9) и не работает в Linux. Набор символов () => UTF-8 в обеих системах. Версия JVM => Java 9 (я тестировал open jvm и oracle jvm под Linux)
Код:
public static String createSign(String uri, String apiSecret) throws UnsupportedEncodingException{
byte[] signBytes = calculateSignBytes(uri, apiSecret);
return bytesToHexString(signBytes);
}
private static byte[] calculateSignBytes(String uri, String secret) throws UnsupportedEncodingException {
try {
Mac mac = Mac.getInstance(ALGORITHM);
SecretKeySpec secretKeySpec = new SecretKeySpec(secret.getBytes(), ALGORITHM);
mac.init(secretKeySpec);
return mac.doFinal(uri.getBytes());
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
throw new RuntimeException(e);
}
}
private static String bytesToHexString(byte[] bytes){
StringBuilder stringBuilder = new StringBuilder();
for (byte b : bytes) {
stringBuilder.append(String.format("%02x", b));
}
return stringBuilder.toString();
}
то же самое под Windows и Linux. Я также протестировал компиляцию и экспорт исполняемого JAR-файла под windows и установил его в Linux, все функции работают нормально, кроме кода выше.