我的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