如何在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的编码。可用的toString
和Buffer
构造函数编码如下:
'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');