gpt4 book ai didi

azure-storage - CryptoJS (HMAC Sha256) 给出不正确的输出?

转载 作者:行者123 更新时间:2023-12-02 03:44:26 24 4
gpt4 key购买 nike

首先声明我不是密码学算法方面的专家...

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

首先,我的代码:

_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 没有返回与替代实现相同的值(HMAC 和 SHA256)。例如,字符串“Mon, 29 Jul 2013 16:04:20 GMT\n/senchaazurestorage/Tables”显示为:

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

深入挖掘,我发现大多数 HMAC/SHA265 算法返回的数据与 PHP 的输出相匹配……我是否遗漏了 CryptoJS 中的某些内容?还是存在合理的差异?

最佳答案

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

我仍然遇到 Azure HTTP“授权” header 的问题,但那是另一个问题。

关于azure-storage - CryptoJS (HMAC Sha256) 给出不正确的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17929107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com