首页 > 解决方案 > 如何从字节 [] 打印十六进制?

问题描述

我的目标是遵循 RFC6455 [第 8 页]

The server would then take the SHA-1 hash of this,
   giving the value 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6
   0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea.

我假设0xb3等于 179。

这是我用来打印字节 [] 的代码行。记录器是 sl4fj。

  private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketWorkerThread.class);

    public void onOpen() {
        String GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
        byte[] SHA_1_hash_value = MessageDigest.getInstance("SHA-1").digest(
                ("dGhlIHNhbXBsZSBub25jZQ==" + GUID).getBytes()
        );
        StringBuilder sb = new StringBuilder();
        for (byte b : SHA_1_hash_value) {
          sb.append(String.format("%02X ", b));
        }
    }

我的预期结果:

0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6
   0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea

实际结果:

64 3A 23 A1 A9 CE 6D 23 B2 71 B8 D5 45 CE A8 5F 25 CD 45 1E

标签: javawebsocket

解决方案


  private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketWorkerThread.class);

public void onOpen() {
    String GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
    byte[] SHA_1_hash_value = MessageDigest.getInstance("SHA-1").digest(
            ("dGhlIHNhbXBsZSBub25jZQ==" + GUID).getBytes()
    );
    StringBuilder sb = new StringBuilder();
    for (byte b : SHA_1_hash_value) {
      sb.append("0x" + String.format("%02X ", b).toLowerCase());
    }
}

推荐阅读