Base64 encoding from Node and openssl library produce different output

Why do the following produce different output?

  1. OpenSSL command line

echo Chris | openssl base64 // Q2hyaXMK

  1. Node.js

new Buffer('Chris').toString('base64') // Q2hyaXM=

I'm trying to use the passport-http library for Basic authentication, and it appears to be expecting encoded data in the format of #1. This is a problem for me as all my tests rely on node for generating encoded data (mocha, supertest). Any help is greatly appreciated.

The difference is that the echo command appends a linefeed character at the end of the text it's supposed to output.

In other words, the Base64 encoding for Chris is actually Q2hyaXM=, but the representation of Chris\n (where \n is not a literal \ followed by a literal n but just a linefeed character) is Q2hyaXMK indeed. You might want to compare with:

new Buffer('Chris\n')

In order to compare with the result of your command ;)