我正在尝试使用PHP上编写的示例来实现签名计算。但是这些代码会返回不同的结果。
PHP示例:
select u.department as DM,
count(u.userid) as num_users,
count(l.userlogid) as num_log_users,
count(case when o.status = 1 then l.userlogid end) as num_status1_users
from allusers u left join
userlog l
on l.userlogid = u.USERID
group by o.department;
Ruby代码:
base64_encode(hash_hmac('sha384', $message, trim($key), true))
这里的消息变量是JSON。
答案 0 :(得分:2)
OpenSSL::HMAC.hexdigest
输出一个十六进制字符串,这就是base64编码的内容。在您的PHP代码中,true
的{{1}}参数使其输出原始二进制数据。没有它,它将是十六进制,我认为这将与Ruby相同。
因此,您需要删除PHP代码中的hash_hmac
参数,以便在PHP中编码十六进制表示形式,或者在Ruby中使用true
,以便在Ruby中编码原始二进制数据
在PHP的密钥上也有OpenSSL::HMAC.digest
,而在Ruby中没有trim()
,但是我不认为这是问题所在。