#!/usr/bin/perl -w # (C) 2003-2007 Willem Jan Hengeveld # Web: http://www.xs4all.nl/~itsme/ # http://wiki.xda-developers.com/ # # $Id$ # use strict; # this script base64 encodes or decodes stdin. #todo: strip ----BEGIN ---...---END --- wrapper use MIME::Base64; use Getopt::Long; my $direction="encode"; my $binarymode= 0; my $separatelines= 0; # keep line structure of input. my $urlcode=0; # note: facebook, youtube use a modified version with tr "+/" "-_" GetOptions( "u|decode" => sub { $direction="decode"; }, "e|encode" => sub { $direction="encode"; }, "y" => \$urlcode, "b" => \$binarymode, "l" => \$separatelines, ) or die usage(); sub usage { return <<__EOF__ Usage: base64 [-u|-e] [-b] [-l] __EOF__ } if ($direction eq "encode") { if ($binarymode) { binmode STDIN; } do_encode(); } elsif ($direction eq "decode") { if ($binarymode) { binmode STDOUT; } do_decode(); } else { die "must specify either '-u' or '-e'\n"; } exit(0); sub do_encode { $/=undef; while(<>) { my $enc= encode_base64($_); $enc =~ tr{+/}{-_} if ($urlcode); print $enc; } } sub do_decode { while(<>) { chomp; for my $word (split /(\s+)/) { if ($word =~ /\s/) { print $word if ($separatelines); } else { $word =~ tr{-_}{+/} if ($urlcode); print decode_base64($word); } } } }