我需要解码一个base64令牌作为身份验证字符串,我在Python、Perl和PHP中找到了一些工作示例,并在Node中编写了等效代码,但遇到了一个问题。似乎Node的base64解码器的工作方式与其他3种语言不同。在
在Python中运行这个
token = 'BaSe64sTRiNghERe'
decoded_token = token.decode('base64')
print decoded_token
返回此字符串
???F#`?D^
在Perl中运行这个
^{pr2}$返回此字符串
???F#`?D^
在PHP中运行这个
$token = 'BaSe64sTRiNghERe';
$decoded_token = base64_decode($token, true);
echo $decoded_token;
返回此字符串
???F#`?D^
最后,在节点脚本中运行这个
var token = 'BaSe64sTRiNghERe',
decoded_token = Buffer.from(token, 'base64').toString();
console.log(decoded_token);
返回此字符串
????F#`?D^
问题是,为什么解码后的字符串中有额外的问号?在Node中如何获得与Perl、Python和PHP中相同的结果呢?在
更新
在命令行中运行
echo BaSe64sTRiNghERe | base64 --decode
提供了与perl、python和php脚本相同的输出
从同一个节点运行
var exec = require('child_process').exec;
exec('echo BaSe64sTRiNghERe | base64 --decode', function callback(error, stdout, stderr){
console.log(stdout);
});
我还是拿错了东西。在
输出是不同的,因为您已经生成了不可打印字符,并且node处理这些不可打印字符的方式与其他语言不同。您还将丢失信息:
如果将python代码段修改为如下所示:
^{pr2}$然后修改nodejs代码段如下所示:
您将避免它们处理不可打印字符的方式的差异,并看到base64解码具有相同的字节值。在
相关问题 更多 >
编程相关推荐