我用salt实现了密码哈希,所以我将salt生成为二进制,哈希密码,base64编码密码和salt,然后将它们存储到数据库中。

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

问题是,我找不到一种方法把盐解码回二进制数据。我使用Buffer对它们进行编码。toString方法,但似乎没有反向函数。


当前回答

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

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

适用于Node.js v5.11.1及以下版本

构造一个新的Buffer并传递'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
}

其他回答

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

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

适用于Node.js v5.11.1及以下版本

构造一个新的Buffer并传递'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
}