[Linux] Base64でファイルをエンコード、デコードする

base64コマンドは、ファイルをBase64でエンコード、デコードすることができます。Base64エンコードは、バイナリファイルをASCIIキャラクタに変換します。

1. Base64でエンコードする

base64 [option]... [file]

fileを指定しない場合、標準入力から読み込んだデータをエンコードします。
それでは実際にバイナリファイルbase64でエンコードしてみます。はじめに適当なファイルを用意します。

$ dd if=/dev/urandom bs=1M count=10 of=original.bin
10+0 レコード入力
10+0 レコード出力
10485760 bytes (10 MB, 10 MiB) copied, 0.0489838 s, 214 MB/s
$ ls -Gg original.bin
-rw-rw-r-- 1 10485760  3月 16 12:40 original.bin

base64でエンコードします。base64コマンドは標準出力へエンコード結果を出力するので、適当なフィアルへリダイレクトしてファイルとして保存させます。

$ base64 original.bin > base64.txt
$ ls -Gg base64.txt
-rw-rw-r-- 1 14164977  3月 16 12:41 base64.txt

エンコードしたファイルの、はじめの10行を確認してみます。

$ head base64.txt
BAlQnXakc997pH7eLVvoEoZ3F4OFeAZGvDOuXzdzDRS3s+3rDETyvVmTzHTFqQ+r+tzR7ZVrQPTY
R0pNoIWm5/i5+Rp0s7LHDTJmzSVD237QbD+FGJcJiFKCF2kHuNuaUaLakTxBhHqPMZ1cOgrQz1zU
/s5N5iuBW9YEo2mQPUNE19srexBcz5sh24FpQX6oftReuML5tY1ikklBEKs0+g0FfptFArb3LJop
RYEErYCk7JUUbfqfbe1rHSfDJTMl8SR0FF5kL/lQuNS/M+GGXZVuR89kHMzm5XaRud0+/q2lyVX+
rHAxq6IYlPOZ+GVOG3n9sbtJT86oJuYqAzopJ0a2D1gcsbIYTOAwyILhqu9fAYxFUQS0G0MNyxzq
0vxwW4eZZ1NpxlJlzb3/lW6ogBJUacs3NmNtFyh8Rud0N7aehtlWyF/zw6IgVxwGuvKZU6ktETlx
m5a1CE7AHfkZkx3FbLYBZsivorT4BRbgwBkdJfS/DK7Z7c5A2mBESrkbXypeSaesVCzoCvEH8yEd
LinhwAa7YGkxI8OSyD0Qjnve46C2oLfBJxHiJycF1H1bOVsQtmKs4rvncPHb/lOLpfj4b1hfjLpe
1IJo8yQo3LK8jKnQBXtdu+x1rnRQDlHCBfSPDOR/1x/yiW3OKqhdMJko+xpAqFCXztgOFLlH1PG6
KV9UAncGL2NWJbb0Y1TofAStWYcdtTxrgJkV9p+TKsxrllSEkKsSYED+EieDhVV9rSlzoCIn4Wpd

base64でエンコードできているようです。

Base64でデコードする

base64 -d [option]... [file]

-d‘オプションを利用することで、base64でデコードすることができます。
さきほどbase64でエンコードしたファイルを元に戻してみます。

$ base64 -d base64.txt > decode.bin
$ ls -Gg *.bin
-rw-rw-r-- 1 10485760  3月 16 12:45 decode.bin
-rw-rw-r-- 1 10485760  3月 16 12:40 original.bin

オリジナルのファイル(original.bin)と同じサイズのファイルができました。バイト単位でも正しいのかcmpコマンドで確かめてみます。

$ cmp original.bin decode.bin
$ echo $?
0

元のファイルと同じようです。
 
以上、base64でのエンコード、デコードを行う方法の紹介でした。