NodeJS:如何将base64编码的字符串解码回二进制?

Xav*_*_Ex 240 base64 encoding decoding node.js

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

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

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

Mat*_*all 539

从Node.js v6.0.0 开始,不推荐使用构造函数方法,而是应该使用以下方法从base64编码的字符串构造新的缓冲区:

var b64string = /* whatever */;
var buf = Buffer.from(b64string, 'base64'); // Ta-da
Run Code Online (Sandbox Code Playgroud)

对于Node.js v5.11.1及更低版本

构造一个new Buffer传递'base64'为第二个参数:

var b64string = /* whatever */;
var buf = new Buffer(b64string, 'base64'); // Ta-da
Run Code Online (Sandbox Code Playgroud)

如果你想要干净,你可以检查是否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
}
Run Code Online (Sandbox Code Playgroud)

  • 对于那些搜索反向方法的人 - `(new Buffer(str)).toString("base64")`. (21认同)
  • 如果`toString('ascii')`不适合你,那就试试吧:`Buffer.from(string,'base64').toString('utf-8')` (8认同)
  • 这个方法现在已被弃用,现在正确的方法是:`var buf = Buffer.from(b64string,'base64');`如下所示:https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings (6认同)
  • 仅供参考,此代码似乎不适用于较旧的Node版本.Buffer.from仍然是节点4.3.6上的函数,但是'TypeError:base64不是函数' (3认同)
  • 它不是_that_糟糕,第3个构造函数就在那里. (2认同)