Base64 1.9 build: 9639 released: 2007-05-20 compiled with: Java 1.8.0_131

encode/decode with Base64 and Base64u.

Copyright: (c) 1999-2017 Canadian Mind Products.

Java class library.
Download from: http://mindprod.com/products1.html#BASE64

----

Notes:

You must install the Java JDK to use this program.
See http://mindprod.com/jgloss/jgloss/jdk.html

You are pretty much on your own how to use this material.
This program requires a manual install! See below.

I put out an avalanche of free software into the world, and submit PAD
files to hundreds of distribution sites, but I rarely hear back from
anyone.  What's happening?  Does it all just work fine?  It is so
complicated nobody can figure out how to use it and they give up on it?
It is it useful?  Since everyone has the source, do people just fix the
programs to their liking themselves?  Did you have trouble installing?  Do
I presume you know too much?  I would be happy to hear from you about your
experiences, positive or negative and your requests for improvements.  A
one-line email to roedy@mindprod.com would be great.

===> Free <===
Full source included.
You may even include the source code, modified or unmodified
in free/commercial open source/proprietary programs that you write and distribute.
May be used freely for any purpose but military.
For more details on this restriction, see
http://mindprod.com/contact/nonmil.html
If you include any Canadian Mind Products code in your own applications,
your app too must be labelled non-military use only.
http://mindprod.com/contact/nonmil.html
All Java jars and source code are included. If you need the class files or Javadoc, you will have to build them yourself. To streamline the zip downloads, class files and Javadoc have been removed.

----

Prerequisites:

This program runs under any OS that supports Java,
(e.g.W2K/XP/W2003/Vista/W2008/W7-32/W7-64/W8-32/W8-64/Linux/LinuxARM/LinuxX86
/LinuxX64/Ubuntu/Solaris/SolarisSPARC/SolarisSPARC64/SolarisX86/SolarisX64/OSX/AIX...)
so long as you have
<><> Java version 1.8 <><> or later installed (32-bit or 64-bit Java).
See http://mindprod.com/jgloss/installingjava.html for details.

----

Installing on a PC:

Download source and compiled jar files to run on your own machine as a part of your own program.
First install a recent Java JDK or JVM.
See http://mindprod.com/jgloss/installingjava.html.
To install, extract the zip download with WinZip
(or similar unzip utility) into any directory you please,
often J:\ --  ticking off the <span class="click">use folder names</span> option.

----

Installing on a MacIntosh:

Use Safari to download source and compiled jar files to run on your own machine as a part of your own program.
Safari will automatically unpack the zip into ~/Downloads (version 10.5)
[or on the Desktop (version 10.4 and earlier)].
First install a recent Java JDK or JVM.
See http://mindprod.com/jgloss/installingjava.html.
You may optionally move the download tree to a permanent home.
I don't have a MacIntosh, just a PC, so I can't test my Java programs for Mac compatibility.
In theory they should work without problems, but in practice that does not always happen.
If you have problems please, let me know, preferably with screenshots and complete verbatim error messages.

----

Rebuilding:

You are pretty much on your own how to use this material.

----

Use:

Base64 is a freeware way of encoding 8-bit characters using
only ASCII printable characters similar to UUENCODE.
Starting with JDK 1.8 Oracle provided java.util.Base64.
UUENCODE embeds a filename where BASE64 does not. You will
see BASE64 used in encoding digital certificates, in
encoding user:password string in an Authorization: header
for HTTP. The spec is described in RFC 2045.
For more details see http://mindprod.com/jgloss/base64.html
Don't confuse Base64 with x-www-form-urlencoded which
is handled by java.net.URLEncoder.encode/decode or
Base64u.
Base64 armouring uses only the characters A-Z a-z  0-9 +/=.
This makes it suitable for encoding binary data as SQL
strings, that will work no matter what the encoding.
Unfortunately + / and = all have special meaning in URLs.
Base64u gets around this problem. It is a variant on Base64
that uses - _ and * in preference to + / and =, so that it
can be used in URLEncoded contexts with or without
URLEncoding.
Use base64 like this:
// Base64 armouring
import com.mindprod.base64.Base64;
...
// sample byte array to encode
byte[] toSend = { (byte)0xfc, (byte)0x0f, (byte)0xc0};
// create encoder object
Base64 base64 = new Base64();
base64.setLineLength( 72 );  // default
// encoding a byte[]
String send = base64.encoder( toSend );
// decoding a byte[]
byte[] reconstituted = base64.decoder( sent );
use Base64u the same way:
// Base64u armouring
import com.mindprod.base64.Base64u;
...
// sample byte array to encode
byte[] toSend = { (byte)0xfc, (byte)0x0f, (byte)0xc0};
// create encoder object
Base64u base64u = new Base64u();
base64u.setLineLength( 72 );  // default
// encoding a byte[]
String send = base64u.encoder( toSend );
// decoding a byte[]
byte[] reconstituted = base64u.decoder( sent );
For an example that starts and ends with a String, see
Example.java
to run:
java.exe com.mindprod.base64.Example
If your data are too large to encode as one byte array you
need to encode in chunks, keeping in mind that Base64 is a
scheme where 3 bytes are concatenated, then split to form 4
groups of 6-bits each; and each 6-bits gets translated to an
encoded printable ASCII character, via a table lookup.
You must encode groups of 3 bytes together to get 4
chars and decode groups of 4 chars  together to get three
bytes  without a split over a buffer boundary.
One easy way of ensuring that is to make sure all buffers
are a multiple of 12 long.


----

Version History:

 1.0 1999-12-03 posted in comp.lang.java.programmer.

 1.1 1999-12-04 more symmetrical encoding algorithm. more accurate StringBuffer allocation size.

 1.2 2000-09-09 now handles decode as well.

 1.3 2000-09-12 fix problems with estimating output length in encode

 1.4 2002-02-15 correct bugs with uneven line lengths, allow you to configure line
                separator. now need Base64 object and instance methods. new mailing address.

 1.5 2006-01-01

 1.6 2007-01-01

 1.7 2007-03-15 add Example

 1.8 2007-03-15 tidy.

 1.9 2007-05-20 add icon and pad

-30-