2011-10-26 43 views
0

我試圖移植一個API的JavaScript集成到PHP/JQuery的PHP示例。在PHP中,使用下面的代碼創建一個加密的字符串:PHP/Javascript/JQuery - base64 sha256編碼

$sig = base64_encode(hash_hmac('sha256', $sign, $this->secretAccessKey, true) 

,其功能是記錄在這裏:

http://php.net/manual/en/function.hash-hmac.php

http://us.php.net/base64_encode

在Javascript中,我使用jQuery的密碼,以做HMAC作品:

http://code.google.com/p/crypto-js/#HMAC-SHA256 

我試圖弄清楚是否我還需要做一個base64編碼,因爲它看起來已經在base64中了。這是我目前運行的代碼:

var sigHash = Crypto.HMAC(Crypto.SHA256, sign, accessKey); 

這是正確的嗎?我將如何創建一個與上述PHP函數相當的javascript/jquery?

回答

2

HMAC是一個標準。 SHA-256也是如此。所以他們的輸出,不管哪個執行,必須是一樣。

只能在Base64編碼方面有所不同。通常情況下,非字母數字字符是+/,但您不能指望。我檢查過了,兩種實現都使用相同的非字母數字字符。

但是,您仍然應該「手動」檢查幾千個字符串。 PHP中的實現已經過很好的測試。但我不知道是否同樣是在jQuery的實施真的......

爲Base64編碼輸出的語法是:

Crypto.util.bytesToBase64(
    Crypto.HMAC(Crypto.SHA256, sign, accessKey, { asBytes: true }) 
); 
+0

謝謝 - 我想我需要知道的是,僅僅是運行JavaScript中的加密函數以獲得與PHP函數等價的函數就足夠了,還是需要運行加密函數,以及另外添加base64_encode函數 – mheavers

+0

該函數的標準輸出是十六進制編碼,而不是Base64。對於Base64編碼,請參閱更新的答案。 – Dennis

+0

謝謝!這很有幫助。 – mheavers

1

如果你需要靈感的JS實現一個PHP函數,看看PHPJS.org。可以在base64_encode找到與base64_encode等效的JavaScript。

+0

謝謝 - 這很有幫助 – mheavers