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编码。
8条答案
按热度按时间o8x7eapl1#
Buffers可用于获取一个字符串或一段数据,并对结果进行Base64编码。例如:
缓冲区是一个全局对象,因此不需要require。使用字符串创建的缓冲区可以采用可选的编码参数来指定字符串采用的编码。可用的
toString
和Buffer
构造函数编码如下:'ascii' -仅用于7位ASCII数据。这种编码方法非常快,如果设置了,将剥离高位。
'utf8' -多字节编码的Unicode字符。许多网页和其他文档格式使用UTF-8。
'ucs 2' - 2个字节,小端编码的Unicode字符。它只能编码BMP(基本多语言平面,U+0000 - U+FFFF)。
'base64' - Base64字符串编码。
'binary' -一种仅使用每个字符的前8位将原始二进制数据编码为字符串的方法。此编码方法已弃用,应尽量避免使用Buffer对象。此编码将在Node的未来版本中删除。
vbopmzt12#
接受的答案previously contained
new Buffer()
,这在Node.js版本大于6时被认为是一个安全问题(尽管对于这种用例,输入似乎总是可以强制转换为字符串)。根据文档,
Buffer
构造函数已弃用。代码片段应如下所示:
这个答案写好后,已经更新了,现在匹配这个。
8cdiaqws3#
crypto
现在支持Base64(参考):所以你可以简单地做:
u4vypkhs4#
***Buffers***可用于获取字符串或数据片段,并对结果进行Base64编码。例如:
您可以通过npm安装Buffer,如下所示:
npm i buffer --save
您可以在
js
文件中使用它,如下所示:ecbunoof5#
我使用以下代码在Node.js API(Node.js版本10.7.0)中解码Base64字符串:
请不要尝试在浏览器的控制台中运行上述代码。没用的将代码放在Node.js的服务器端文件中。我在API开发中使用了上面的代码。
23c0lvtd6#
试着这样做:
这将把一个字符串转换成base64编码的字符串。
SGVsbG8gV29ybGQ=
,然后可以将其解码回Hello World
00jrzges7#
我已经创建了一个最终的小型JavaScript npm库,用于Node.js中的Base64编码/解码转换。
安装
用法
q9yhzks08#
您可以使用简单的JavaScript进行Base64编码和解码。
这在Base64 encoder decoder中实现。