如何在node.js中执行Base64编码?

node.js是否有内build的base64编码呢?

我问这个问题的原因是crypto final()只能输出hex,二进制或ASCII数据。 例如:

 var cipher = crypto.createCipheriv('des-ede3-cbc', encryption_key, iv); var ciph = cipher.update(plaintext, 'utf8', 'hex'); ciph += cipher.final('hex'); var decipher = crypto.createDecipheriv('des-ede3-cbc', encryption_key, iv); var txt = decipher.update(ciph, 'hex', 'utf8'); txt += decipher.final('utf8'); 

根据文档, update()可以输出base64编码的数据。 但是, final()不支持base64。 我试了,它会打破。

如果我这样做:

 var ciph = cipher.update(plaintext, 'utf8', 'base64'); ciph += cipher.final('hex'); 

那我应该用什么来解密? hex或base64?

因此,我正在寻找一个函数来base64编码我的encryptionhex输出。

谢谢。

缓冲区可用于获取string或数据,并对结果进行base64编码。 例如:

 > console.log(new Buffer("Hello World").toString('base64')); SGVsbG8gV29ybGQ= > console.log(new Buffer("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')) Hello World 

缓冲区是一个全局对象,所以不需要。 使用string创build的缓冲区可以使用可选的编码参数来指定string的编码。可用的toStringBuffer构造函数编码如下:

'ascii' – 仅用于7位ASCII数据。 这种编码方法是非常快的,如果设置,将剥离高位。

'utf8' – 多字节编码的Unicode字符。 许多网页和其他文档格式使用UTF-8。

'ucs2' – 2个字节,小端编码的Unicode字符。 它只能编码BMP(基本多语言平面,U + 0000 – U + FFFF)。

'base64' – Base64string编码。

'binary' – 通过仅使用每个字符的前8位将原始二进制数据编码为string的一种方法。 此编码方法已弃用,应尽可能避免使用Buffer对象。 此编码将在未来版本的Node中删除。

接受的答案包含在大于6的节点版本中被认为是安全问题的东西(尽pipe这个用例可能总是强制input一个string)。

根据文档,不build议使用Buffer构造函数。

下面是在ws库中使用它的一个漏洞的例子。

代码片段应为:

 console.log(Buffer.from("Hello World").toString('base64')); console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')); 

encryption现在支持base64( 参考 ):

 cipher.final('base64') 

所以你可以简单地做:

 var cipher = crypto.createCipheriv('des-ede3-cbc', encryption_key, iv); var ciph = cipher.update(plaintext, 'utf8', 'base64'); ciph += cipher.final('base64'); var decipher = crypto.createDecipheriv('des-ede3-cbc', encryption_key, iv); var txt = decipher.update(ciph, 'base64', 'utf8'); txt += decipher.final('utf8');