Node.js有内置的Base64编码了吗?

我问这个问题的原因是crypto的final()只能输出十六进制、二进制或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');

那我该用什么来解密呢?十六进制还是Base64?

因此,我正在寻找一个函数以base64编码我的加密十六进制输出。


当前回答

我使用下面的代码来解码Node.js API中的Base64字符串,Node.js版本10.7.0:

let data = 'c3RhY2thYnVzZS5jb20=';  // Base64 string
let buff = new Buffer(data, 'base64');  //Buffer
let text = buff.toString('ascii');  // This is the data type that you want your Base64 data to convert to
console.log('"' + data + '" converted from Base64 to ASCII is "' + text + '"');

请不要尝试在浏览器的控制台中运行上述代码。这是行不通的。将代码放在Node.js的服务器端文件中。我在API开发中使用了上面的代码。

其他回答

接受的答案之前包含了new Buffer(),这在大于6的Node.js版本中被认为是一个安全问题(尽管对于这个用例来说,输入似乎总是可以被强制转换为字符串)。

根据文档,Buffer构造函数已弃用。

代码片段应该如下所示:

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

写完这个答案后,它已经更新,现在与这个匹配。

crypto现在支持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');

我创建了一个终极的小型JavaScript npm库,用于在Node.js中进行Base64编码/解码转换。

安装

npm install nodejs-base64-converter --save

使用

var nodeBase64 = require('nodejs-base64-converter');

console.log(nodeBase64.encode("test text")); //dGVzdCB0ZXh0
console.log(nodeBase64.decode("dGVzdCB0ZXh0")); //test text

我使用下面的代码来解码Node.js API中的Base64字符串,Node.js版本10.7.0:

let data = 'c3RhY2thYnVzZS5jb20=';  // Base64 string
let buff = new Buffer(data, 'base64');  //Buffer
let text = buff.toString('ascii');  // This is the data type that you want your Base64 data to convert to
console.log('"' + data + '" converted from Base64 to ASCII is "' + text + '"');

请不要尝试在浏览器的控制台中运行上述代码。这是行不通的。将代码放在Node.js的服务器端文件中。我在API开发中使用了上面的代码。

缓冲区可以用于获取一个字符串或一段数据,并对结果进行Base64编码。例如:

你可以通过npm安装Buffer

你可以像这样在js文件中使用它:

var buffer = require('buffer/').Buffer;

->> console.log(buffer.from("Hello Vishal Thakur").toString('base64'));
SGVsbG8gVmlzaGFsIFRoYWt1cg==  // Result

->> console.log(buffer.from("SGVsbG8gVmlzaGFsIFRoYWt1cg==", 'base64').toString('ascii'))
Hello Vishal Thakur   // Result