小编Ste*_*ano的帖子

如何从终端使用 openSSL 执行 HmacSHA256?

我需要从命令行使用 OpenSSL 执行以下 Java 代码片段:

  private byte[] hmacSha256(byte[] key, byte[] payload) throws GeneralSecurityException {
    Mac mac = Mac.getInstance("HmacSHA256");
    mac.init(new SecretKeySpec(key, "HmacSHA256"));
    mac.update(payload);
    return mac.doFinal();
  }
Run Code Online (Sandbox Code Playgroud)

这些是适用于 Java 但不适用于 OpenSSL 的测试值:

KEY_BASE64="xtztqVgjD+5VHL4rVeKYm0USpDJTEy5Tjc9aK6I/oV0="
KEY_HEX="c6dceda958230fee551cbe2b55e2989b4512a43253132e538dcf5a2ba23fa15d"
PAYLOAD_BASE64="j9F8TrzCabcDoLdHUDaUuv6ea224xikwbPF1IW0OjkY="
DIGEST_HEX="c2ec711448a4f5bb851279eca0a628847254855966ad09de7e734b7df48e198a"
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个答案,但得到了不同的结果。它看起来像这样:

KEY_BASE64="xtztqVgjD+5VHL4rVeKYm0USpDJTEy5Tjc9aK6I/oV0="
KEY_HEX="c6dceda958230fee551cbe2b55e2989b4512a43253132e538dcf5a2ba23fa15d"
PAYLOAD_BASE64="j9F8TrzCabcDoLdHUDaUuv6ea224xikwbPF1IW0OjkY="
DIGEST_HEX="c2ec711448a4f5bb851279eca0a628847254855966ad09de7e734b7df48e198a"
Run Code Online (Sandbox Code Playgroud)

它确实为我提供了十六进制格式的输出,但该值与我使用相同的负载和键值运行该 Java 代码片段时得到的值不匹配。

我还可以使用另一个命令行工具,只要它在大多数 Linux 默认包管理器列表中广泛可用即可。

bash java cryptography openssl

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

bash ×1

cryptography ×1

java ×1

openssl ×1