node.js有内置的base64编码吗? html
我之因此这么说是由于来自crypto
final()
只能输出hex,binary或ascii数据。 例如: node
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。 我试过了,它会破裂。 api
若是我这样作: 浏览器
var ciph = cipher.update(plaintext, 'utf8', 'base64'); ciph += cipher.final('hex');
而后我应该用什么解密? Hex或base64? 安全
所以,我正在寻找一个函数来对个人加密十六进制输出进行base64编码。 服务器
谢谢。 函数
crypto如今支持base64( 参考 ): this
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');
接受的答案包含在大于6的节点版本中被视为安全问题的内容(尽管此用例彷佛可能始终将输入强制转换为字符串)。 加密
根据文档不推荐使用Buffer
构造函数。
如下是在ws库中使用它可能致使的漏洞示例。
代码段应为:
console.log(Buffer.from("Hello World").toString('base64')); console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'));
我使用如下代码来解码节点API nodejs版本10.7.0中的base64字符串
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 + '"');
请不要尝试在浏览器的控制台中运行上面的代码,将没法正常工做。 将代码放在nodejs的服务器端文件中。 我在API开发中使用上面的代码。
缓冲区可用于获取字符串或数据,并对结果进行base64编码。 例如:
> console.log(Buffer.from("Hello World").toString('base64')); SGVsbG8gV29ybGQ= > console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')) Hello World
缓冲区是一个全局对象,所以不须要。 使用字符串建立的缓冲区可使用可选的编码参数来指定字符串所在的编码。可用的toString
和Buffer
构造函数编码以下:
'ascii' - 仅适用于7位ASCII数据。 这种编码方法很是快,若是设置将剥离高位。
'utf8' - 多字节编码的Unicode字符。 许多网页和其余文档格式使用UTF-8。
'ucs2' - 2字节,小端编码的Unicode字符。 它只能编码BMP(基本多语言平面,U + 0000 - U + FFFF)。
'base64' - Base64字符串编码。
'binary' - 一种经过仅使用每一个字符的前8位将原始二进制数据编码为字符串的方法。 不推荐使用此编码方法,应尽量避免使用Buffer对象。 在未来的Node版本中将删除此编码。