如何让PHP创建类似Objective-C的HMAC-SHA1字符串?

如何让PHP创建类似Objective-C的HMAC-SHA1字符串?,php,objective-c,sha1,hmac,Php,Objective C,Sha1,Hmac,我正在尝试用PHP和Objective-C实现一个身份验证解决方案。这两种语言都使用相同的密钥和相同的密钥创建自己的HMAC-SHA1编码字符串 显然,他们的方式似乎有所不同 在Objective-C端,我使用OAuthCustomer作为签名类,它生成外观正确的编码字符串: /3n/d4sKN6k3I7nBm1qau59UukU= 在PHP方面,我使用内置函数hash_hmac('sha1',…)和base64编码,这会产生以下结果: ZmY3OWZmNzc4YjBhMzdhOTM3MjNi

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

显然,他们的方式似乎有所不同

在Objective-C端,我使用OAuthCustomer作为签名类,它生成外观正确的编码字符串:

/3n/d4sKN6k3I7nBm1qau59UukU=
在PHP方面,我使用内置函数hash_hmac('sha1',…)和base64编码,这会产生以下结果:

ZmY3OWZmNzc4YjBhMzdhOTM3MjNiOWMxOWI1YTlhYmI5ZjU0YmE0NQ==
然后,我尝试使用另一个函数(如上所述),这会产生base64编码:

NWY1ODUwOWE3NGI4NWU5ZTIxMDYzMTNmNzk3NTYxMDQ4OWE1MmUzNQ==
我完全不知道如何解决这个问题,我甚至不知道为什么会发生这种情况

非常感谢你的帮助


保罗

好吧,我再加上一个假答案。(在Stackoverflow上,每个问题都应加上答案。)

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

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

 md5($str, $raw_output=TRUE);

 hash("sha1", $data, $raw_output=TRUE);

hash_hmac()
的输出是一个十六进制字符串。您已经对该十六进制字符串进行了base64_编码,这可能是错误的。首先将hash_hmac的第四个参数设置为true。谢谢。我改变了它,但输出并没有真正的不同(键和秘密是动态的,所以它有一点改变):N2ZmYWNlZjc2YjYwZGIzMzA0ZjBmMDhiNDhkMzUyNTJhYjViYTY1Nw==不,你没有。解码后还是个十六进制字符串,你真是个天才。我将md5函数的第三个值更改为true,因为我遗漏了一个括号。现在它的工作原理与预期一致。谢谢!:)@马里奥:回答一下,得到一些分数!