10

我正在尝试使用 PHP 和 Objective-C 实现身份验证解决方案。两种语言都使用相同的密钥和相同的秘密创建自己的 HMAC-SHA1 编码字符串。

显然,他们的做法似乎有所不同。

在 Objective-C 方面,我使用 OAuthCustomer 作为签名类,它产生正确的编码字符串:

/3n/d4sKN6k3I7nBm1qau59UukU=

在 PHP 方面,我使用了带有 base64 编码的内置函数 hash_hmac('sha1',...) ,它产生了这个:

ZmY3OWZmNzc4YjBhMzdhOTM3MjNiOWMxOWI1YTlhYmI5ZjU0YmE0NQ==

然后我尝试使用另一个函数(在此处提到),这会产生 base64 编码:

NWY1ODUwOWE3NGI4NWU5ZTIxMDYzMTNmNzk3NTYxMDQ4OWE1MmUzNQ==

我完全不知道如何解决这个问题,我什至不知道为什么会这样。

多谢帮助,

保罗

4

1 回答 1

27

好的,我会添加一个虚假的答案。(在 Stackoverflow 上,每个问题都应该用答案来修饰。)

PHP 中的散列函数大多返回十六进制字符串,而不是真实数据。(无论出于何种原因)。通常有一个函数参数可以使其与其他实现所期望的兼容:

 hash_hmac("sha1", $data, $key, $raw_output=TRUE);

 md5($str, $raw_output=TRUE);

 hash("sha1", $data, $raw_output=TRUE);
于 2010-12-25T14:03:38.507 回答