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

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编码我加密的十六进制输出。

谢谢。


缓冲区可用于获取字符串或数据并对结果进行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中删除。


接受的答案包含在大于6的节点版本中被认为是安全问题的东西(尽管这个用例似乎总是可以将输入强制为一个字符串)。

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

这是一个在ws库中使用它可能导致的漏洞的例子。

代码片段应为:

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

加密现在支持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');
链接地址: http://www.djcxy.com/p/43717.html

上一篇: How to do Base64 encoding in node.js?

下一篇: inserting/reading Base64 strings with SQLite