Node和openssl库的Base64编码产生不同的输出

use*_*450 2 base64 openssl echo basic-authentication node.js

为什么以下产生不同的输出?

  1. OpenSSL命令行
echo Chris | openssl base64
# Q2hyaXMK
Run Code Online (Sandbox Code Playgroud)
  1. Node.js的
new Buffer('Chris').toString('base64')
// Q2hyaXM=
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用该passport-http库进行基本身份验证,它似乎期望编码数据的格式为#1.这对我来说是一个问题,因为我的所有测试都依赖于Node来生成编码数据(mocha,supertest).

ccj*_*mne 5

区别在于echo命令在其输出的末尾附加换行符(\n\n).

换句话说,该Base64编码Chris确实Q2hyaXM=,的表示Chris\n(其中\n只是一个newline字符)是Q2hyaXMK.

您可能想与以下内容进行比较:

new Buffer('Chris\n')
Run Code Online (Sandbox Code Playgroud)

...或更好,但我们可以找到manUAL条目echo是:

Options:
  -n    do not append a newline
Run Code Online (Sandbox Code Playgroud)

所以简单地使用:

echo -n Chris | openssl base64
#     
Run Code Online (Sandbox Code Playgroud)

Q2hyaXM=按预期输出!