【问题标题】:CryptoJS (HMAC Sha256) giving incorrect output?CryptoJS(HMAC Sha256)输出不正确?
【发布时间】:2013-07-29 13:00:54
【问题描述】:

首先让我说我不是密码算法方面的专家...

我正在尝试构建一种方法来格式化 Windows Azure 的 HTTP 标头 - 此标头需要通过 HMAC 使用 SHA256 加密其部分消息(然后还进行 base64 编码)。

我选择使用CryptoJS,因为它有一个活跃的用户社区。​​p>

首先,我的代码:

_encodeAuthHeader : function (url, params, date) {
    //http://msdn.microsoft.com/en-us/library/windowsazure/dd179428
    var canonicalizedResource = '/' + this.getAccountName() + url;

    /*
     StringToSign = Date + "\n" + CanonicalizedResource
     */
    var stringToSign = date + '\n' + canonicalizedResource;
    console.log('stringToSign >> ' + stringToSign)

    var encodedBits = CryptoJS.HmacSHA256(stringToSign, this.getAccessKey());
    console.log('encodedBits >> ' + encodedBits);

    var base64Bits = CryptoJS.enc.Base64.stringify(encodedBits);
    console.log('base64Bits >> ' + base64Bits);

    var signature = 'SharedKeyLite ' + this.getAccountName() + ':' + base64Bits;
    console.log('signature >> ' + signature);

    return signature;
},

该方法成功返回了一个“签名”,其中包含适当的加密/编码片段。但是,Azure 抱怨它的格式不正确。

一些示例输出:

stringToSign >> Mon, 29 Jul 2013 16:04:20 GMT\n/senchaazurestorage/Tables

encodedBits >> 6723ace2ec7b0348e1270ccbaab802bfa5c1bbdddd108aece88c739051a8a767

base64Bits >> ZyOs4ux7A0jhJwzLqrgCv6XBu93dEIrs6IxzkFGop2c=

signature >> SharedKeyLite senchaazurestorage:ZyOs4ux7A0jhJwzLqrgCv6XBu93dEIrs6IxzkFGop2c=

进行一些调试时,我注意到 CryptoJS 没有返回与替代实现相同的值(带有 SHA256 的 HMAC)。例如,字符串“Mon, 29 Jul 2013 16:04:20 GMT\n/senchaazurestorage/Tables”显示为:

  • 6723ace2ec7b0348e1270ccbaab802bfa5c1bbdddd108aece88c739051a8a767”通过 CryptoJS
  • faa89f45ef029c63d04b8522d07c54024ae711924822c402b2d387d05398fc9f”通过 PHP hash_hmac('sha256', ... )

更深入地挖掘,我看到大多数 HMAC/SHA265 算法返回的数据与 PHP 的输出相匹配……我在 CryptoJS 中遗漏了什么吗?还是有合理的区别?

【问题讨论】:

  • 在更多的调试中......似乎在我的消息中包含“\n”(换行符)是杀死 CryptoJS 的原因。有任何想法吗?我认为 Azure 需要。

标签: azure-storage hmac cryptojs


【解决方案1】:

正如我在第一条评论中提到的,换行符 ("\n") 引起了问题。转义(“\ \n”,中间没有空格)似乎已经修复了 HMAC/SHA256 输出中的不一致问题。

Azure HTTP“授权”标头仍有问题,但这是另一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    相关资源
    最近更新 更多