有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java getBytes()在Windows(Java9)下正常工作,在Linux下也不工作

方法getBytes()在Windows(Java9)下按预期工作,在Linux下不工作。Characterset()=>;两个系统上都有UTF-8。JVM版本=>;Java 9(我在Linux下测试了open jvm和oracle jvm)
代码:

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下也是如此。我还测试了在windows下编译和导出可执行JAR,并在Linux上运行它,除了上面的代码,所有功能都可以正常工作


共 (1) 个答案

  1. # 1 楼答案

    请记住始终使用字符集,这样可以避免意外的结果

    new SecretKeySpec(secret.getBytes ( Charsets.UTF_8 ), ALGORITHM)