base64解码在node中的工作方式与php、perl或python不同

2024-05-29 05:48:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要解码一个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);
});

我还是拿错了东西。在


Tags: 字符串echo脚本tokennode节点var解码
1条回答
网友
1楼 · 发布于 2024-05-29 05:48:46

输出是不同的,因为您已经生成了不可打印字符,并且node处理这些不可打印字符的方式与其他语言不同。您还将丢失信息:

>>> token = 'BaSe64sTRiNghERe'
>>> decoded_token = token.decode('base64')
>>> print decoded_token
???F#`?D^
>>> decoded_token[0] == decoded_token[1]
False

如果将python代码段修改为如下所示:

^{pr2}$

然后修改nodejs代码段如下所示:

var token = 'BaSe64sTRiNghERe',
decoded_token = Buffer.from(token, 'base64').toString('hex');
console.log(decoded_token);

您将避免它们处理不可打印字符的方式的差异,并看到base64解码具有相同的字节值。在

相关问题 更多 >

    热门问题