Javascript BTOA 与 bash 中的 base64?

Phi*_*ide 4 bash shell-script base64 javascript

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

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

Javascript:

btoa("hello");                   # aGVsbG8=
btoa("username:password");       # dXNlcm5hbWU6cGFzc3dvcmQ=
btoa("testing");                 # dGVzdGluZw==
Run Code Online (Sandbox Code Playgroud)

重击:

echo hello | base64              # aGVsbG8K
echo username:password | base64  # dXNlcm5hbWU6cGFzc3dvcmQK
echo testing | base64            # dGVzdGluZwo=
Run Code Online (Sandbox Code Playgroud)

结果总是相似但不同。

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

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

Jef*_*ler 6

echo “helpfully”在输出中添加了一个换行符,所以 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
Run Code Online (Sandbox Code Playgroud)

或者更好,使用printf

$ printf '%s' hello | od -c
0000000   h   e   l   l   o
0000005
$ printf '%s' hello | base64
aGVsbG8=
$ echo -n hello | base64
aGVsbG8=
Run Code Online (Sandbox Code Playgroud)