我需要在发送到 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=