bash 中的 Javascript BTOA 与 base64 对比?

bash 中的 Javascript BTOA 与 base64 对比?

我需要在发送到 API 之前将用户名和密码组合转换为 Base64。

javascript BTOA 函数对我有用,但是当我尝试在 bash 中使用 base64 命令时,我得到的结果略有不同。

JavaScript:

btoa("hello");                   # aGVsbG8=
btoa("username:password");       # dXNlcm5hbWU6cGFzc3dvcmQ=
btoa("testing");                 # dGVzdGluZw==

重击:

echo hello | base64              # aGVsbG8K
echo username:password | base64  # dXNlcm5hbWU6cGFzc3dvcmQK
echo testing | base64            # dGVzdGluZwo=

结果总是相似但又不同。

服务器需要 JS 风格的编码,但我需要使用 bash。

为什么结果不同但相似?如何使用 bash 从 javascript 生成结果?

答案1

echo“helpively”在输出中添加换行符(基于标准),因此 Base64 也尽职尽责地对其进行编码。

告诉echo不要添加换行符:

$ echo hello | od -c
0000000   h   e   l   l   o  \n
0000006
$ echo -n hello | od -c
0000000   h   e   l   l   o
0000005

或者更好的是,使用printf

$ printf '%s' hello | od -c
0000000   h   e   l   l   o
0000005
$ printf '%s' hello | base64
aGVsbG8=
$ echo -n hello | base64
aGVsbG8=

相关内容