さわらブログ

さわら(@xhiroga)の技術ブログ

ターミナルで base64 エンコードが失敗すると思ったら echo が改行を吐いてた

タイトルで言い切りました。

TL;DR

good

echo -n Aladdin:OpenSesame | /usr/bin/base64
QWxhZGRpbjpPcGVuU2VzYW1l

bad

echo Aladdin:OpenSesame | /usr/bin/base64
QWxhZGRpbjpPcGVuU2VzYW1lCg==

Basic認証・Authorizationヘッダー・文字コードについて

なぜか開発環境のWebサイトへの外形監視が失敗するので困ったのがことの始まりです。

一番初めに疑ったのは文字コードでした。Basic認証が必要なWebサイトでは、レスポンス時にBasic認証に用いる文字コードを指定できます。

WWW-Authenticate: Basic realm="User Visible Realm", charset="UTF-8"

でもBasic認証で使う範囲の文字って ASCII だろうが UTF-8 だろうがバイト表現は同じになりません?

console.log(Buffer.from("Aladdin:OpenSesame", "ascii"))
// <Buffer 41 6c 61 64 64 69 6e 3a 4f 70 65 6e 53 65 73 61 6d 65>

console.log(Buffer.from("Aladdin:OpenSesame", "utf-8"))
// <Buffer 41 6c 61 64 64 69 6e 3a 4f 70 65 6e 53 65 73 61 6d 65>

なりますね。

そこで base64decodeしたら改行が見つかって問題解決しました。