获取Ruby的OpenSSL :: HMAC.hexdigest()以输出与PHP的hash_hmac()相同的内容

时间:2011-03-18 19:03:01

标签: php ruby

我正在尝试使用Web服务提供商的API。他们在Ruby中没有一个例子,但他们确实有一个用于PHP的例子,而我正试图在两者之间进行解释。 API示例在PHP的hash_hmac()调用中始终使用“true”,这会生成二进制输出。差异似乎是Ruby的OpenSSL :: HMAC.hexdigest()函数总是返回文本。 (如果我将PHP调用更改为“false”,则返回相同的值。)有没有人知道一种方法来“编码”从OpenSSL :: HMAC.hexdigest()返回的文本,以获得与hash_hmac返回的相同的内容('sha256',$ text,$ key,true)?

2 个答案:

答案 0 :(得分:5)

使用OpenSSL::HMAC.digest获取二进制输出。

答案 1 :(得分:1)

您需要将每对十六进制数字转换为具有相同值的字节。我不知道任何Ruby,但这类似于在PHP中处理它。

首先,取你的十六进制数字串并将它们分成一个数组。数组中的每个元素应该是两个字符长。将每个元素从两个十六进制字节的字符串转换为整数。看起来你可以通过在每个字符串上调用hex方法来实现这一点。

接下来,使用参数c*在转换后的数组上调用pack,将每个整数转换为单字节字符。你应该得到正确的字符串作为结果。