2012-08-02 180 views
3

我正在嘗試編寫一個javascript lib來將事件推送到Pusher。javascript中的HMAC SHA256十六進制摘要

在我使用的環境中,我無法使用nodejs,所以沒有require('crypto')...或者至少我不知道在節點外部使用它的方式。

我按照這裏的示例指南:http://pusher.com/docs/rest_api;我被困在 的部分,它說我應該生成HMAC SHA256十六進制摘要。

我使用這個庫http://code.google.com/p/crypto-js/#HMAC

那麼,下面就推的說明我寫

CryptoJS.HmacSHA256(
    'POST\n/apps/3/channels/project-3/events\nauth_key=278d425bdf160c739803&auth_timestamp=1272044395&auth_version=1.0&body_md5=7b3d404f5cde4a0b9b8fb4789a0098cb&name=foo', 
    '7ad3773142a6692b25b8' 
); 

但是,這給我20b132baa2aaf44ea1fab814f0788aaa44eed23a2d252c72e4dc2aaea0d6ac24而不是b3152b2bb5a5b0bae66435a498797aa763e9b74f86cc97c9175424f8308b2f80

什麼是困擾我,我沒有做「十六進制摘要」的一部分,所以也許這就是我錯過了,但我找不到合適的lib來做到這一點的JavaScript。 你發現我做了什麼錯誤嗎?你有圖書館建議嗎?

在此先感謝您的幫助。

+0

十六進制摘要只意味着一個十六進制加密哈希,它看起來像你正在得到的。不知道有什麼問題,但... – 2012-08-02 19:36:12

+0

是的,所以也許這只是我使用的數據錯誤,問題是我在幾個月前在Java中寫了類似的東西,並且它使用了這些數據,所以它是正確的。 – 2012-08-02 19:39:34

+0

嗯...我會建議嘗試一個[第二庫](http://point-at-infinity.org/jssha256/),看看你是否得到不同的結果。 – 2012-08-02 19:41:53

回答

2

我一直在努力做同樣的事情。推者的文件應該更清楚地說明這個問題。事實證明,這不是加密方法。這是您列出參數的順序。您的郵件正文必須採用如下格式:

{「data」:「{\」message \「:\」hello world \「}」,「name」:「my_event」,「channel」 :「test_channel」}

數據必須先是,然後是消息,接着是名稱,最後是通道名稱。

然後,當你創建你的身份驗證簽名,你必須列出你的參數,像這樣:

POST \ N /應用/ 3 /事件\ nauth_key = 278d425bdf160c739803 & auth_timestamp = 1353088179 & auth_version = 1.0 & body_md5 = ec365a775a4cd0599faeb73354201b6f

所以認證密鑰是第一個,然後是時間戳,然後是auth版本,最後是主體md5。

一旦我遵循這個確切的模式,我就開始工作。希望這有助於!