我正在尝试将API集成的PHP示例移植到Javascript / JQuery.在PHP中,使用以下代码创建加密的字符串:
$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?
解决方法:
HMAC是一个标准. SHA-256也是如此.因此,无论采用哪种实现,它们的输出都必须相同.
Base64编码中可能仅存在差异.通常,非字母数字字符是和/,但您不能指望这一点.我已经检查过,并且两个实现都使用相同的非字母数字字符.
但是,您仍然应该“手动”检查几千个字符串. PHP中的实现已经过测试.但是我不知道jQuery的实现是否也是如此…
Base64编码输出的语法为:
Crypto.util.bytesToBase64(
Crypto.HMAC(Crypto.SHA256, sign, accessKey, { asBytes: true })
);