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

Posted

技术标签:

【中文标题】NodeJS:如何将base64编码的字符串解码回二进制? [复制]【英文标题】:NodeJS: How to decode base64 encoded string back to binary? [duplicate] 【发布时间】:2013-01-12 10:31:53 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

从 Node.js v6.0.0 开始,使用 the constructor method has been deprecated 并且应该使用以下方法从 base64 编码字符串构造新缓冲区:

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

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

构造一个新的Buffer 和pass 'base64' as the second argument:

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

【讨论】:

这还不错,第三个构造函数就在那里。 对于那些搜索反向方法的人 - ( new Buffer( str ) ).toString( "base64" ) 这个方法现在已经被弃用了,现在正确的方法是:var buf = Buffer.from(b64string, 'base64'); 在这里注明:nodejs.org/api/… 仅供参考,此代码似乎不适用于较旧的 Node 版本。 Buffer.from 仍然是节点 4.3.6 上的一个函数,但是 'TypeError: base64 is not a function' 如果toString('ascii') 不适合你,试试这个:Buffer.from(string, 'base64').toString('utf-8')

以上是关于NodeJS:如何将base64编码的字符串解码回二进制? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 NodeJs 中解码 base64 编码的 webm 视频

如何在打字稿快递服务器中将字符串解码/编码为base64

[NodeJs] 如何使用nodejs对base64进行编解码?

base 64 以角度编码和解码字符串 (2+)

在 Java 中如何进行 BASE64 编码和解码

解码某些 Base64 字符串时出错,但不是其他字符串