Java与Ruby HMAC SHA256不同意

时间:2012-10-15 12:35:13

标签: java ruby encryption hmac

我无法让Ruby和Java就HMAC达成一致意见:

红宝石:

hmac_key = "my hmac key" #this is THE REAL KEY
msg = "fCyVmpFAZxv9Utui2QWGUtoGJ//Zr5aH+1PV31ry/dwX3yVdeEMIMW/dfoA9\nihbnYrnoSnb2yyfOrBYoy0JlDvWz8GJ6dY643lDTj7xcw8Q="
hashb16  = OpenSSL::HMAC.hexdigest('sha256', hmac_key, msg)
puts hashb16

052310d1fc91df4e5bbb47194cc401feed51eca98668b501555c78774dad6bed

爪哇:

String hmac_key = "my hmac key";
String encrypted_message_b64 = "fCyVmpFAZxv9Utui2QWGUtoGJ//Zr5aH+1PV31ry/dwX3yVdeEMIMW/dfoA9ihbnYrnoSnb2yyfO\nrBYoy0JlDvWz8GJ6dY643lDTj7xcw8Q=";
final Mac hmac = Mac.getInstance("HmacSHA256");
hmac.init(new SecretKeySpec(hmac_key.getBytes("UTF-8"), "HmacSHA256"));
byte[] signature = hmac.doFinal(encrypted_message_b64.getBytes("UTF-8"));
System.out.println(Hex.encodeHexString(signature));

d5bc0b58f43c6f6611f63822d22f99e18c51a33251a5a1c0c7712b4c7fb1ad24

你能发现什么是错的吗?


编辑:我修复了严重复制/粘贴的字符串。

Edit2:我恢复了修复,并在ruby字符串上使用了正确的内容,因此答案和接受的答案仍然有意义。对不起这个烂摊子

2 个答案:

答案 0 :(得分:5)

消息不同 - 请参阅Ruby块中的dfoA9\n

答案 1 :(得分:2)

我不知道你通过复制和粘贴“固定”了什么,两个源字符串仍然不同(在不同的地方有\n),你发布的哈希现在是相等的。我想你没有他们平等,否则你不会发布问题。

但我所看到的是你使用b64_encoded作为Ruby输入,而不是你向我们展示的msg。它有可能有不同的内容吗?