【问题标题】:PHP / Javascript / JQuery - base64 sha256 encodingPHP / Javascript / JQuery - base64 sha256 编码
【发布时间】:2011-10-26 21:41:52
【问题描述】:

我正在尝试将 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?

【问题讨论】:

    标签: php javascript jquery sha256 hmac


    【解决方案1】:

    HMAC 是一个标准。 SHA-256 也是如此。因此,无论采用哪种实施方式,它们的输出都必须相同。

    只能在 Base64 编码上有所不同。通常,非字母数字字符是+/,但你不能指望它。我检查过,两种实现都使用相同的非字母数字字符。

    但是,您仍然应该“手动”检查几千个字符串。 PHP 中的实现经过了很好的测试。但是我不知道jQuery中的实现是否也是如此......

    Base64 编码输出的语法是:

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

    【讨论】:

    • 谢谢 - 我想我需要知道的是,仅在 javascript 中运行加密函数以获得与 PHP 函数等效的功能是否足够,或者我是否需要运行加密函数,以及添加base64_encode函数
    • 函数的标准输出是十六进制编码,不是Base64。对于 Base64 编码,请参阅更新的答案。
    【解决方案2】:

    如果您需要有关 PHP 函数的 JS 实现的灵感,请查看 PHPJS.org。 base64_encode 的 JavaScript 等效项位于:base64_encode

    【讨论】:

      猜你喜欢
      • 2014-11-29
      • 1970-01-01
      • 2018-12-28
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 2016-10-31
      相关资源
      最近更新 更多