• ベストアンサー

base64でエンコード(デコード)するには?

タイトルの通りなのですが、base64でエンコード(デコード)するには、どうすればよいのでしょうか? もちろん、モジュールを用いれば簡単に済みますが、モジュールが入っていない環境のことも考え(将来は、違うマシンで使うことも考えられるため)、モジュールを用いないでエンコード(デコード)したいと思っております。 また、base64は、どういった規則でエンコードされているのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

base64で使われているアルゴリズムはいくつかの相違はありますが、 基本的に uuencode/uudecode で使われているものと同一です (3バイトのデータを4バイトで表現する)。 そして、Perlのpack/unpackはテンプレート文字列 'u' を使うことにより uuencode/uudecodeすることができます。そこで以下のようなサブルーチン を使ってBase64のエンコード/デコードができます。 use strict; use warnings; use MIME::Base64; my $base64_pat = "A-Za-z0-9+/"; my $uu_pat = "`!-_"; sub my_encode_base64 { my $arg = shift; my $mod3 = length($arg) % 3; my $tmp = pack 'u', $arg; $tmp =~ s/^.//msg; $tmp =~ tr[`!-_][A-Za-z0-9+/]; #substr($tmp, -(3-$mod3), 3-$mod3, q{=} x (3-$mod3)); substr($tmp, -(3-$mod3), 3-$mod3) = q{=} x (3-$mod3) unless $mod3==0; $tmp; } sub my_decode_base64 { my $arg = shift; $arg =~ s/=?=$//; $arg =~ tr[A-Za-z0-9+/][`!-_]; my $len = pack 'c', 32 + 0.75*length($arg); unpack 'u', $len . $arg; } my $str = <<EOS; こんにちは世界 サンプル文字列 EOS my $r1 = my_encode_base64($str); my $r2 = encode_base64($str); print "\$r1 = $r1\n"; print "\$r2 = $r2\n"; my $r3 = my_decode_base64($r2); my $r4 = decode_base64($r2); print "\$r3 = $r3\n"; print "\$r4 = $r4\n";

参考URL:
http://www.darts.jp/reference/rfc/rfc2045-jp.txt,http://www5d.biglobe.ne.jp/~stssk/rfc/rfc3548j.html

その他の回答 (1)

noname#22650
noname#22650
回答No.1

こちらに解説とC言語のサンプルがあります。 http://www.sea-bird.org/doc/Cygwin/BASE64enc.html

関連するQ&A