Base64Coder

package com.shine;

public class Base64Coder {
    private static char[] map1 = new char[64];
      private static byte[] map2;

      public static String encodeString(String s)
      {
        return new String(encode(s.getBytes()));
      }

      public static char[] encode(byte[] in)
      {
        return encode(in, in.length);
      }

      public static char[] encode(byte[] in, int iLen)
      {
        int oDataLen = (iLen * 4 + 2) / 3;
        int oLen = (iLen + 2) / 3 * 4;
        char[] out = new char[oLen];
        int ip = 0;
        int op = 0;
        while (ip < iLen)
        {
          int i0 = in[(ip++)] & 0xFF;
          int i1 = ip < iLen ? in[(ip++)] & 0xFF : 0;
          int i2 = ip < iLen ? in[(ip++)] & 0xFF : 0;
          int o0 = i0 >>> 2;
          int o1 = (i0 & 0x3) << 4 | i1 >>> 4;
          int o2 = (i1 & 0xF) << 2 | i2 >>> 6;
          int o3 = i2 & 0x3F;
          out[(op++)] = map1[o0];
          out[(op++)] = map1[o1];
          out[op] = (op < oDataLen ? map1[o2] : '=');
          op++;
          out[op] = (op < oDataLen ? map1[o3] : '=');
          op++;
        }
        return out;
      }

      public static String decodeString(String s)
      {
        return new String(decode(s));
      }

      public static byte[] decode(String s)
      {
        return decode(s.toCharArray());
      }

      public static byte[] decode(char[] in)
      {
        int iLen = in.length;
        if (iLen % 4 != 0) {
          throw new IllegalArgumentException("Length of Base64 encoded input string is not a multiple of 4.");
        }
        while ((iLen > 0) && (in[(iLen - 1)] == '='))
          iLen--;
        int oLen = iLen * 3 / 4;
        byte[] out = new byte[oLen];
        int ip = 0;
        int op = 0;
        while (ip < iLen)
        {
          int i0 = in[(ip++)];
          int i1 = in[(ip++)];
          int i2 = ip < iLen ? in[(ip++)] : 65;
          int i3 = ip < iLen ? in[(ip++)] : 65;
          if ((i0 > 127) || (i1 > 127) || (i2 > 127) || (i3 > 127)) {
            throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
          }
          int b0 = map2[i0];
          int b1 = map2[i1];
          int b2 = map2[i2];
          int b3 = map2[i3];
          if ((b0 < 0) || (b1 < 0) || (b2 < 0) || (b3 < 0)) {
            throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
          }
          int o0 = b0 << 2 | b1 >>> 4;
          int o1 = (b1 & 0xF) << 4 | b2 >>> 2;
          int o2 = (b2 & 0x3) << 6 | b3;
          out[(op++)] = (byte)o0;
          if (op < oLen)
            out[(op++)] = (byte)o1;
          if (op < oLen)
            out[(op++)] = (byte)o2;
        }
        return out;
      }

      static
      {
        int i = 0;
        for (char c = 'A'; c <= 'Z'; c = (char)(c + '\001'))
          map1[(i++)] = c;
        for (char c = 'a'; c <= 'z'; c = (char)(c + '\001'))
          map1[(i++)] = c;
        for (char c = '0'; c <= '9'; c = (char)(c + '\001'))
          map1[(i++)] = c;
        map1[(i++)] = '+';
        map1[(i++)] = '/';

        map2 = new byte['€'];

        for ( i = 0; i < map2.length; i++)
          map2[i] = -1;
        for ( i = 0; i < 64; i++)
          map2[map1[i]] = (byte)i;
      }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值