Java vs Ruby HMAC SHA256 don';我不同意

Java vs Ruby HMAC SHA256 don';我不同意,java,ruby,encryption,hmac,Java,Ruby,Encryption,Hmac,我无法让Ruby和Java就HMAC达成一致: 红宝石: 爪哇: 你能看出什么地方不对劲吗 编辑:我修复了复制/粘贴错误的字符串 Edit2:我恢复了修复,并在ruby字符串上使用了适当的内容,因此答案和接受的答案仍然有意义。很抱歉造成混乱消息不同-请参阅Ruby块中的dfoA9\n。我不知道您通过复制和粘贴“修复”了什么,两个源字符串仍然不同(在不同的位置有\n),并且您发布的哈希现在是相等的。我想你不会让他们平等,否则你就不会发帖了 但我看到的是,您使用的是b64_encoded作为Rub

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

红宝石:

爪哇:

你能看出什么地方不对劲吗


编辑:我修复了复制/粘贴错误的字符串


Edit2:我恢复了修复,并在ruby字符串上使用了适当的内容,因此答案和接受的答案仍然有意义。很抱歉造成混乱

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

我不知道您通过复制和粘贴“修复”了什么,两个源字符串仍然不同(在不同的位置有
\n
),并且您发布的哈希现在是相等的。我想你不会让他们平等,否则你就不会发帖了


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

Java也包含转义换行符(\n)Ruby,并且在不同的位置尝试使用相同的字符串吗?它仍然不工作,我最初没有运行代码;在更改了b64_encoded=>消息之后,我现在运行了ruby版本。我安装了JDK并下载了commons编解码器jar(如果您将代码块包含在一个随时可以运行的源文件中,这会很有帮助);但是我的Java非常生锈,我无法让它在包含jar的情况下运行。不过,由于换行符,这是一个愚蠢的复制/粘贴错误。Ruby有严格的_encode64,应该可以防止这种情况;java也应该有这个。
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