-//
-// Copyright (c) 2013 Ford Motor Company
-//
-package com.smartdevicelink.util;
-
-public class Base64 {
-
- private static final String defaultString = "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure";
-
- private static char[] map = new char[64];
- private static byte[] unmap = new byte['z' + 1];
- static {
- byte i = 0;
- for (char c = 'A'; c <= 'Z'; c++) {
- unmap[c] = i;
- map[i++] = c;
- }
- for (char c = 'a'; c <= 'z'; c++) {
- unmap[c] = i;
- map[i++] = c;
- }
- for (char c = '0'; c <= '9'; c++) {
- unmap[c] = i;
- map[i++] = c;
- }
- unmap['+'] = i;
- map[i++] = '+';
- unmap['/'] = i;
- map[i++] = '/';
-
- unmap['='] = 0;
- }
-
- /**
- * @param args
- */
- public static void main(String[] args) {
-
- String toEncode = defaultString;
- if (args.length > 0) {
- toEncode = args[0];
- }
- System.out.println(toEncode);
- String encoded = encode(toEncode.getBytes());
- System.out.println(encoded);
- String decoded = new String(decode(encoded));
- System.out.println(decoded);
- }
-
- public static String encode(byte[] toEncode) {
-
- int iSrc = 0;
- int iDest = 0;
- int srcLen = toEncode.length;
- int destLen = (srcLen * 4 + 2) / 3;
- int padLen = ((srcLen + 2) / 3) * 4;
- char[] dest = new char[padLen];
-
- while (iSrc < srcLen) {
- int src1 = toEncode[iSrc++];
- int src2 = (iSrc < srcLen) ? toEncode[iSrc++] : 0;
- int src3 = (iSrc < srcLen) ? toEncode[iSrc++] : 0;
- int dest1 = (src1 >>> 2);
- int dest2 = (src1 << 4) | (src2 >> 4);
- dest2 &= 0x3F;
- int dest3 = (src2 << 2) | (src3 >>> 6);
- dest3 &= 0x3F;
- int dest4 = src3 & 0x3F;
- dest[iDest++] = map[dest1];
- dest[iDest++] = map[dest2];
- dest[iDest] = iDest < destLen ? map[dest3] : '=';
- iDest++;
- dest[iDest] = iDest < destLen ? map[dest4] : '=';
- iDest++;
- }
-
- return new String(dest);
- }
-
- public static byte[] decode(String toDecode) {
- int iSrc = 0;
- int iDest = 0;
- char[] src = toDecode.toCharArray();
- int srcLen = src.length;
- int destLen = ((srcLen / 4) * 3);
- if (src[srcLen - 1] == '=') {
- destLen--;
- }
- if (src[srcLen - 2] == '=') {
- destLen--;
- }
- byte[] dest = new byte[destLen];
-
- while (iSrc < srcLen) {
- byte src1 = unmap[src[iSrc++]];
- byte src2 = unmap[src[iSrc++]];
- byte src3 = unmap[src[iSrc++]];
- byte src4 = unmap[src[iSrc++]];
- int dest1 = (src1 << 2) | (src2 >>> 4);
- int dest2 = (src2 << 4) | (src3 >>> 2);
- int dest3 = (src3 << 6) | src4;
- dest[iDest++] = (byte) dest1;
- if (iDest < destLen) {
- dest[iDest++] = (byte) dest2;
- }
- if (iDest < destLen) {
- dest[iDest++] = (byte) dest3;
- }
- }
-
- return dest;
- }
-
-}
+package com.smartdevicelink.util;\r
+\r
+public class Base64 {\r
+\r
+ private static final String defaultString = "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure";\r
+\r
+ private static char[] map = new char[64];\r
+ private static byte[] unmap = new byte['z' + 1];\r
+ static {\r
+ byte i = 0;\r
+ for (char c = 'A'; c <= 'Z'; c++) {\r
+ unmap[c] = i;\r
+ map[i++] = c;\r
+ }\r
+ for (char c = 'a'; c <= 'z'; c++) {\r
+ unmap[c] = i;\r
+ map[i++] = c;\r
+ }\r
+ for (char c = '0'; c <= '9'; c++) {\r
+ unmap[c] = i;\r
+ map[i++] = c;\r
+ }\r
+ unmap['+'] = i;\r
+ map[i++] = '+';\r
+ unmap['/'] = i;\r
+ map[i++] = '/';\r
+\r
+ unmap['='] = 0;\r
+ }\r
+\r
+ /**\r
+ * @param args\r
+ */\r
+ public static void main(String[] args) {\r
+\r
+ String toEncode = defaultString;\r
+ if (args.length > 0) {\r
+ toEncode = args[0];\r
+ }\r
+ System.out.println(toEncode);\r
+ String encoded = encode(toEncode.getBytes());\r
+ System.out.println(encoded);\r
+ String decoded = new String(decode(encoded));\r
+ System.out.println(decoded);\r
+ }\r
+\r
+ public static String encode(byte[] toEncode) {\r
+\r
+ int iSrc = 0;\r
+ int iDest = 0;\r
+ int srcLen = toEncode.length;\r
+ int destLen = (srcLen * 4 + 2) / 3;\r
+ int padLen = ((srcLen + 2) / 3) * 4;\r
+ char[] dest = new char[padLen];\r
+\r
+ while (iSrc < srcLen) {\r
+ int src1 = toEncode[iSrc++];\r
+ int src2 = (iSrc < srcLen) ? toEncode[iSrc++] : 0;\r
+ int src3 = (iSrc < srcLen) ? toEncode[iSrc++] : 0;\r
+ int dest1 = (src1 >>> 2);\r
+ int dest2 = (src1 << 4) | (src2 >> 4);\r
+ dest2 &= 0x3F;\r
+ int dest3 = (src2 << 2) | (src3 >>> 6);\r
+ dest3 &= 0x3F;\r
+ int dest4 = src3 & 0x3F;\r
+ dest[iDest++] = map[dest1];\r
+ dest[iDest++] = map[dest2];\r
+ dest[iDest] = iDest < destLen ? map[dest3] : '=';\r
+ iDest++;\r
+ dest[iDest] = iDest < destLen ? map[dest4] : '=';\r
+ iDest++;\r
+ }\r
+\r
+ return new String(dest);\r
+ }\r
+\r
+ public static byte[] decode(String toDecode) {\r
+ int iSrc = 0;\r
+ int iDest = 0;\r
+ char[] src = toDecode.toCharArray();\r
+ int srcLen = src.length;\r
+ int destLen = ((srcLen / 4) * 3);\r
+ if (src[srcLen - 1] == '=') {\r
+ destLen--;\r
+ }\r
+ if (src[srcLen - 2] == '=') {\r
+ destLen--;\r
+ }\r
+ byte[] dest = new byte[destLen];\r
+\r
+ while (iSrc < srcLen) {\r
+ byte src1 = unmap[src[iSrc++]];\r
+ byte src2 = unmap[src[iSrc++]];\r
+ byte src3 = unmap[src[iSrc++]];\r
+ byte src4 = unmap[src[iSrc++]];\r
+ int dest1 = (src1 << 2) | (src2 >>> 4);\r
+ int dest2 = (src2 << 4) | (src3 >>> 2);\r
+ int dest3 = (src3 << 6) | src4;\r
+ dest[iDest++] = (byte) dest1;\r
+ if (iDest < destLen) {\r
+ dest[iDest++] = (byte) dest2;\r
+ }\r
+ if (iDest < destLen) {\r
+ dest[iDest++] = (byte) dest3;\r
+ }\r
+ }\r
+\r
+ return dest;\r
+ }\r
+\r
+}\r