我的Web应用程序通过JSON协议与服务器通信。在从Web应用程序发送每条JSON消息之前,我对它运行一个hmac-sha1函数(在已编码的对象上),并将生成的HMAC插入到JSON请求的标头中。PHP中的哈希JSON不会产生与Javascript中的unicode字符相同的结果
在服务器端,我用PHP解码JSON消息,提取HMAC,从对象中取消设置()HMAC,然后将对象编码回JSON并创建一个HMAC。
只要我不使用“ž,š,č”等字符,HMAC就会匹配。当我在消息中使用这些字符时,HMAC不再匹配。
在Web应用程序中,我使用jQuery.post()传输已编码的JSON字符串。
如果我通过JSON编码的答复将我从Web应用程序获得的数据发回给它,应用程序将很好地显示“ž,č,š”。
我该如何让HMAC匹配?
更新: 这只是最新版本的Firefox和Opera的问题。它在IE8和Chrome上运行良好。在前者的浏览器,JSON字符串(在发送之前)是:
{"body":[{"name":"Žiga Kraljevič","email":"[email protected]","password":"secretpass"}],"header":{"apiID":"person-27jhfa83ha-js84sjj18dasjd","hmac":"e4259d6ef8f477c020d644409cc16dd9c42301e8"}}
,而在后者的浏览器(IE8和Chrome,它的工作原理)如下:
{"body":[{"name":"\u017diga Kraljevi\u010d","email":"[email protected]","password":"secretpass"}],"header":{"apiID":"person-27jhfa83ha-js84sjj18dasjd","hmac":"e4e9e2d0d8d11728a2b4329ad6dacdb9409b1de1"}}
你偷偷摸摸的成语没有帮助。我正在使用http://jssha.sourceforge.net/用于sha1-hmac。在PHP中,我使用hash_hmac。 HMAC的关键是服务器和客户端之间共享的秘密,以前通过安全连接进行交换。它提供了消息完整性,所以我知道哪个用户发送了请求。部分JSON请求也是用户的临时唯一标识符。 – Matic 2010-10-05 07:06:27
@Matic:[用jssha添加例子] – bobince 2010-10-05 12:51:33
这样做。谢谢! – Matic 2010-10-05 13:43:07