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 use folder names 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-