我正在尝试将 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 })
);
关于PHP/Javascript/JQuery - base64 sha256 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7909288/