スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに


Base64エンコードは、インターネットで、よく使われているエンコードの1つです。Base64なしに、我々人類の生活は成り立たないといっても過言ではありません。おそらく、毎秒ごとに、ものすごい数のbase64エンコードとbase64エンコードがこの地球上で行われています。

さまざまなプログラムで Base64 を利用するためのライブラリ・モジュールが実装されています。間違いなく、毎日、base64が使われるプログラムが書かれていることでしょう。また、Unixのコマンドにも base64 は openssl base64 といったコマンドが提供されています。間違いなく、それらのコマンドも毎日実行されています。

P言語の1つである Pel では、Base64エンコードするには、MIME::Base64を利用します。

Base64とは


Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。MIMEによって規定されていて、7ビットのデータしか扱うことの出来ない電子メールにて広く利用されています。具体的には、A-Z, a-z, 0-9 までの62文字と、記号2つ (+ , /) 、さらにパディング(余った部分を詰める)のための記号として = が用いられます。この変換によって、データ量は4/3になる。また、MIMEの基準では76文字ごとに改行コードが入るため、この分の2バイトを計算に入れるとデータ量は約138%となります。

サンプルコード

以下にPerlのサンプルコードを示します。
#!/usr/local/bin/perl -w
use strict;

use MIME::Base64;

sub encode{
	my ($data) = @_;
	my $encoded = encode_base64 $data;

	print "source data  $data\n";
	print "encoded data $encoded";
	print "\n";
}

試しに実行してみる


以下のプログラムでは、aを1文字から、10文字まで増やしていって、どのようにデータが変わるかを見てみます。

#!/usr/local/bin/perl -w
use strict;

use MIME::Base64;

sub encode{
	my ($data) = @_;
	my $encoded = encode_base64 $data;

	print "source data  $data\n";
	print "encoded data $encoded";
	print "\n";
}
my $data = "a";

foreach my $i (1..10) {
	encode "a" x $i;
}

実行結果は、以下の通りです。

source data  a
encoded data YQ==

source data  aa
encoded data YWE=

source data  aaa
encoded data YWFh

source data  aaaa
encoded data YWFhYQ==

source data  aaaaa
encoded data YWFhYWE=

source data  aaaaaa
encoded data YWFhYWFh

source data  aaaaaaa
encoded data YWFhYWFhYQ==

source data  aaaaaaaa
encoded data YWFhYWFhYWE=

source data  aaaaaaaaa
encoded data YWFhYWFhYWFh

source data  aaaaaaaaaa
encoded data YWFhYWFhYWFhYQ==

以上の用に、元のデータに対して、エンコードされたデータは、文字列の長さが長くなっていることがわかります。つまり、元のデータサイズから、増えたということが解ります。また、できあがったデータによって、パディングの=(イコール)の数が異なることもご理解いただけたと思います。

ワンライナーで行う方法


perlでワンライナーでbase64エンコードする方法もあります。encode_base64は、デフォルトでは、76文字で改行されてしまうので、第2引数で空文字列を渡します。
perl -MMIME::Base64 -ne 'print encode_base64($_,"")' < sp500.png

もし、76文字で改行されてよいのであれば、第2引数は不要です。
perl -MMIME::Base64 -ne 'print encode_base64($_)' < sp500.png

パディングについて

パディングを削除してもデコードできるかについては、 [2010-10-04-1] で実験します。
参照しているページ (サイト内): [2010-10-04-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー