一尘不染

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

node.js

node.js是否具有内置的base64编码?

我之所以这样问,是因为final()from crypto只能输出十六进制,二进制或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编码。


阅读 270

收藏
2020-07-07

共1个答案

一尘不染

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

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

缓冲区是全局对象,因此不需要。用字符串创建的缓冲区可以使用可选的编码参数来指定字符串的编码形式。可用toStringBuffer构造函数编码如下:

‘ascii’-仅适用于7位ASCII数据。这种编码方法非常快,如果设置,它将去除高位。

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

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

‘base64’-Base64字符串编码。

‘binary’-一种仅使用每个字符的前8位将原始二进制数据编码为字符串的方法。不建议使用此编码方法,应尽可能避免使用Buffer对象。在将来的Node版本中将删除此编码。

2020-07-07