有 Java 编程相关的问题?

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

java OpenSSL Hmac和BouncyCastle Hmac有所不同

我试图弄明白为什么openssl中的hmac不能给我与java中的hmac相同的结果

在开放ssl中

echo -n "Hello" | openssl dgst -sha256 -hmac 04d6b077d60e323711b37813b3a68a71

输出: CC598D8840FE409D5FCC1C856F9E8C311D1C4588505555857B023F1CD94C

在爪哇

String key = "04d6b077d60e323711b37813b3a68a71"
SecretKeySpec key2 = new SecretKeySpec(Hex.decode(key), "RAW");
String data = "Hello";
Mac hmac = Mac.getInstance("Hmac-SHA256", BouncyCastleProvider.PROVIDER_NAME);
hmac.init(key2)
byte[] bytes = hmac.doFinal(data.getBytes());
System.out.println(Hex.toHexString(bytes));

输出: 877f9c8eb44c20987e3978928fbfcea0f1cf99c88f9db904596921b7ecf0613b

我不知道为什么这些是不同的


共 (1) 个答案

  1. # 1 楼答案

    OpenSSL将-hmac key选项视为密钥只是一个字节数组,表示为相应的ASCII字符。因此,密钥仅限于包含可打印字符

    在Java中,通过使用

    SecretKeySpec key2 = new SecretKeySpec( key.getBytes("ASCII"), "RAW" );
    

    或者,您可以使用openssl dgst -sha256 -mac HMAC -macopt hexkey:string,其中string将被视为十六进制编码键