首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于加密,节点6升级导致aws中的SignatureDoesNotMatch错误。because _ Node =‘二进制’

由于加密,节点6升级导致aws中的SignatureDoesNotMatch错误。because _ Node =‘二进制’
EN

Stack Overflow用户
提问于 2017-10-02 09:10:19
回答 1查看 109关注 0票数 3

我已经从节点4移到了节点6,这导致使用aws返回以下错误消息:

SignatureDoesNotMatch:我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。

查看代码,这似乎是因为我的代码调用crypto来创建和验证散列和集合。

代码语言:javascript
复制
 crypto.DEFAULT_ENCODING = 'binary' 

如果我将其从“二进制”更改为“buffer”(这是默认的),aws可以工作,但我的代码无法验证旧哈希。

这是用于创建和检查散列的代码:

代码语言:javascript
复制
  crypto.pbkdf2(password, salt, iterations, keysize, function (err, derivedKey) {
      callback(null, [salt.toString('base64'), new Buffer(derivedKey).toString('base64')])
  });

看一下编码的加密文档,我不知道使用缓冲区和二进制文件有什么区别。

是否有一种方法只对此加密方法使用二进制编码,而不影响aws?

如果没有,是否有一种方法可以将pbkdf2使用“缓冲区”编码生成的散列转换为如果使用“二进制”编码就会产生的哈希?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-05 16:26:57

查看crypto.pbkdf2源代码,发现了这里。只有当DEFAULT_ENCODING变量没有设置为"buffer“(这是默认的)时,才会使用它。如果将其设置为其他编码,则执行这段代码以将结果更改为所需的编码:

代码语言:javascript
复制
 // at this point, we need to handle encodings.
if (callback) {
  function next(er, ret) {
    if (ret)
      ret = ret.toString(encoding);
    callback(er, ret);
  }
  PBKDF2(password, salt, iterations, keylen, digest, next);
} else {
  var ret = PBKDF2(password, salt, iterations, keylen, digest);
  return ret.toString(encoding);
}

因此,如果删除DEFAULT_ENCODING或将其设置为"buffer“,然后对pbkdf2函数的结果使用result.toString("binary"),则应该得到与使用DEFAULT_ENCODING="binary"完全相同的结果,如下例所示:

代码语言:javascript
复制
var crypto = require("crypto");

function defaultBuffer(){
    crypto.DEFAULT_ENCODING = "buffer";
    crypto.pbkdf2(password, salt, 5, 12, function (err, derivedKey) {
        console.log("Key (Buffer + toString('binary')): "+ derivedKey.toString('binary'))
      });

}
function defaultBinary(){
    crypto.DEFAULT_ENCODING = "binary";
    crypto.pbkdf2(password, salt, 5, 12, function (err, derivedKey) {
        console.log("Key (binary): "+ derivedKey)
      });
}
var password = 'password';
var salt = 'salt';
defaultBuffer();
defaultBinary();

这将产生以下结果:

密钥(缓冲器+toString(“二进制”)):? 密钥(二进制):?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46522618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档