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

14 浏览
0 Comments

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

我正在实现带有盐的密码哈希,因此我生成了二进制盐,对密码进行哈希处理,将密码和盐进行Base64编码,然后将它们存储到数据库中。

现在,当我要检查密码时,我应该将盐解码为二进制数据,然后使用它对提供的密码进行哈希处理,再将结果进行Base64编码,并检查结果是否与数据库中的一致。

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

0
0 Comments

在Node.js v6.0.0中,使用构造函数方法已经被弃用,应该使用以下方法从base64编码的字符串构建一个新的buffer:

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
}

感谢!不幸的是,他们的文档对这个方法并不清楚...(nodejs.org/docs/v0.4.8/api/buffers.html#new_Buffer)

不是那么糟糕,第三个构造函数就在那里。

那么我们如何知道它返回的是无效的?文档在哪里?

对于那些搜索反向方法的人 - ( new Buffer( str ) ).toString( "base64" )。

这个方法现在已经被弃用了,正确的方式现在是:var buf = Buffer.from(b64string, 'base64');,如此处所示:nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings

感谢更新的信息。你介意对这个答案提出修改建议吗?

提到的那一部分应该是答案的一部分!

顺便说一下,这段代码在旧的Node版本上似乎不起作用。在node 4.3.6上,Buffer.from仍然是一个函数,但是会抛出'TypeError: base64 is not a function'错误。

对我来说,它也引发了这个不清楚的错误,必须升级node才能正常工作。

如果toString('ascii')对你不起作用,可以尝试这个方法:Buffer.from(string, 'base64').toString('utf-8')

使用base64解码字符串到字符串的方法:let text = Buffer.from(imgurl, "base64").toString("utf-8");

你弄错了。应该是:const buf = Buffer.from('abc', 'utf-8').toString('base64');

只是想说在Node中使用Buffer的方式似乎已经被弃用了。更好的方法是:const binary = Buffer.from(base64String, 'base64');

对于反向方法,你可以通过调用atob()来解码它们。const a = new Buffer(str).toString('base64'); const decodedData = atob(a)

0