Bashにこれを行うツールはありますか?
答え1
コンボ
はい、いくつかあります。コンボcoreutils
(debianではデフォルトでインストールされています)両方が含まれています。32ベースそして64ビットベース。以下をエンコードまたはデコードできます。
$ printf '%s' "abc" | base64
YWJj
$ printf '%s' "abc" | base64 | base64 -d
abc
echoを使用すると、後に改行文字が追加され、結果としてBase64でエンコードされた文字列が変更される可能性があることを理解してください。
$ echo "abc" | base64
YWJjCg==
パッケージbasez
とopenssl
。後者は通常デフォルトでインストールされますが、前者はそうではありません。
$ printf '%s' "abc" | openssl base64
YWJj
コーディング
ソース文字列は、base64エンコーディングに関係なく、すべてのロケール(コードページ)にエンコードされます。 Base64プログラムは文字ではなくバイトをエンコードします。
$ printf '%s' "éäìǫ" | base64 | base64 -d
éäìǫ
すべてのシステムでまったく同じように動作します。さて、通常のシステムでは、この内容はコマンドラインにも印刷されecho "éäìǫ"
ます。éäìǫ
もちろん、ソース文字列があるシステムでエンコードされてから別のロケールを使用するシステムでデコードされると、次のような結果が出る可能性があります。モジバクひも。これはbase64で解決される問題ではなく、文字列エンコーディングを変更して解決される問題です。一緒にいるかもしれないiconv
。
$ echo -n "Москва" | base64 # in a utf8 locale
0JzQvtGB0LrQstCw
ただし、iso889-5を使用するキリル語ロケールでは(おそらくru_RU.ISO-8859-5ですが、キリル語を使用する他の言語も利用可能です):
$ echo "0JzQvtGB0LrQstCw" | base64 -d
ааОбаКаВаА
$ echo "0JzQvtGB0LrQstCw" | base64 -d | iconv -f utf8 -t iso8859-5
Москва