328

我正在使用盐实现密码散列,所以我将盐生成为二进制,对密码进行散列,base64 对密码和盐进行编码,然后将它们存储到数据库中。

现在,当我检查密码时,我应该将盐解码回二进制数据,使用它来散列提供的密码,base64 编码结果并检查结果是否与数据库中的匹配。

问题是,我找不到将盐解码回二进制数据的方法。我使用 Buffer.toString 方法对它们进行了编码,但似乎没有反向功能。

4

1 回答 1

716

从 Node.js v6.0.0 开始,使用构造函数方法已被弃用,应使用以下方法从 base64 编码字符串构造新缓冲区:

var b64string = /* whatever */;
var buf = Buffer.from(b64string, 'base64'); // Ta-da

对于 Node.js v5.11.1 及以下版本

构造一个 newBuffer作为第二个参数传递:'base64'

var b64string = /* whatever */;
var buf = new Buffer(b64string, 'base64'); // Ta-da

如果要干净,可以检查是否from存在:

if (typeof Buffer.from === "function") {
    // Node 5.10+
    buf = Buffer.from(b64string, 'base64'); // Ta-da
} else {
    // older Node versions, now deprecated
    buf = new Buffer(b64string, 'base64'); // Ta-da
}
于 2013-01-28T23:17:22.160 回答