gpt4 book ai didi

node.js - Buffer.toString ('base64' 创建了哪种 base64 编码变体)?

转载 作者:行者123 更新时间:2023-12-03 12:14:06 26 4
gpt4 key购买 nike

在 Node.js 中,通常使用内置的 Buffer创建 base64 编码数据:

const data = 'Hello world!';
const base64encoded = Buffer.from(data, 'utf8').toString('base64');
console.log(base64encoded); //prints "SGVsbG8gd29ybGQh"

在撰写本文时, Wikipedia lists no fewer than 14 variants base64 的。然而, Buffer manual page没有指定实际使用的是 base64 的哪个变体。

是否有任何权威来源说明以这种方式使用 base64 的哪个变体进行编码?

最佳答案

简答 :
Base64 variantBuffer.toString('base64')是:

Base64 standard RFC 4648 §4


更长的答案(为什么以及如何) :
为什么我需要吗?
最近我还需要找到它并首先在谷歌中搜索弹出这个没有回答问题的帖子。所以这就是我如何找到它以及为什么我首先需要它。
我们的系统与不同的客户端和 3rd 方组件通信,它们有时具有不同的默认 Base64 变体,有些具有 Base64 RFC 2045 ,有的有 Base64 RFC 4648 §5 ,有的有 Base64 RFC 4880和一些 Base64 RFC 4648 §4 .
如果一方(发送方)使用与解码方(接收方)不同的变体将数据编码为 Base64,那么接收方可能会遇到运行时异常。所以需要我通过服务器统一编码格式。
如何我找到了吗?
我做的第一件事 - 我检查了 Buffer 实现的源代码,希望在评论中找到任何记录在案的引用。但是我没有找到该变体的任何明确规范,它仅声明它支持 base64 作为其内部之一 BufferEncoding .
我做的第二件事 - 我在本地 docker 上创建了一个小的 POC,它对所有 ASCII 字符进行编码和解码 - 并将输出与所有 table of Base64 variants 匹配
这是我的 Node POC 的代码:
// Raw bytes for all ASCII from 0 to 127
function dataAscii(){
const bytes = [];
for(let i=0; i<127; i++){
bytes.push(i);
}
return Buffer.from(bytes);
}

router.get('/base64-check', function(req, res, next) {
// Encode into base64 using the default variant of NodeJS
const encodedBase64 = dataAscii().toString('base64');
// Check if padding with '=' is mandatory or optional
const noPad = encodedBase64.replace(/=/g, '');
let optionalPad;
try{
Buffer.from(noPad, 'base64').toString('binary');
optionalPad = true;
}catch(e){
console.error(e);
optionalPad = false;
}
res.status(200).send({ encodedBase64, optionalPad });
});
这个 POC 的输出是:
Base64 NodeJS Buffer result
所以来自 table of Base64 variants 的唯一变体与此输出匹配的是 Base64 RFC 4648 §4 :
Variant conclusion

关于node.js - Buffer.toString ('base64' 创建了哪种 base64 编码变体)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50966023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com