Base64Encoder

原创 2004年10月06日 22:11:00

using System;
namespace WebApplication1
{
 /// <summary>
 /// Base64Encoder 的摘要说明
 /// 说明:Base编码类
 /// 写作者:Quentin
 /// </summary>
 public class Base64Encoder
 {
  byte[] source;
  int length,length2;
  int blockCount;
  int paddingCount;
  
  public Base64Encoder()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  public Base64Encoder(byte[] input)
  {
   source=input;
   length=input.Length;
   if((length % 3)==0)
   {
    paddingCount=0;
    blockCount=length/3;
   }
   else
   {
    paddingCount=3-(length % 3);
    blockCount=(length+paddingCount) / 3;
   }
   length2=length+paddingCount;
  }

  public char[] GetEncoded()
  {
   byte[] source2;
   source2=new byte[length2];

   for (int x=0; x<length2;x++)
   {
    if (x<length)
    {
     source2[x]=source[x];
    }
    else
    {
     source2[x]=0;
    }
   }
     
   byte b1, b2, b3;
   byte temp, temp1, temp2, temp3, temp4;
   byte[] buffer=new byte[blockCount*4];
   char[] result=new char[blockCount*4];
   for (int x=0;x<blockCount;x++)
   {
    b1=source2[x*3];
    b2=source2[x*3+1];
    b3=source2[x*3+2];

    temp1=(byte)((b1 & 252)>>2);

    temp=(byte)((b1 & 3)<<4);
    temp2=(byte)((b2 & 240)>>4);
    temp2+=temp;

    temp=(byte)((b2 & 15)<<2);
    temp3=(byte)((b3 & 192)>>6);
    temp3+=temp;

    temp4=(byte)(b3 & 63);

    buffer[x*4]=temp1;
    buffer[x*4+1]=temp2;
    buffer[x*4+2]=temp3;
    buffer[x*4+3]=temp4;

   }

   for (int x=0; x<blockCount*4;x++)
   {
    result[x]=sixbit2char(buffer[x]);
   }


   switch (paddingCount)
   {
    case 0:break;
    case 1:result[blockCount*4-1]='=';break;
    case 2:result[blockCount*4-1]='=';
     result[blockCount*4-2]='=';
     break;
    default:break;
   }
   return result;
  }
  private char sixbit2char(byte b)
  {
   char[] lookupTable=new char[64]
    {
      'A','B','C','D','E','F','G','H','I','J','K','L','M',
     'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
     'a','b','c','d','e','f','g','h','i','j','k','l','m',
     'n','o','p','q','r','s','t','u','v','w','x','y','z',
     '0','1','2','3','4','5','6','7','8','9','+','/'};

   if((b>=0) &&(b<=63))
   {
    return lookupTable[(int)b];
   }
   else
   {

    return ' ';
   }
  }

 }
}


解码类

using System;

namespace WebApplication1
{
 /// <summary>
 /// Base64Decoder 的摘要说明。
 /// 说明:Base编码类
 /// 写作者:Quentin
 /// </summary>
 public class Base64Decoder
 {
  char[] source;
  int length, length2, length3;
  int blockCount;
  int paddingCount;

  public Base64Decoder()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  public Base64Decoder(char[] input)
  {
   int temp=0;
   source=input;
   length=input.Length

   for (int x=0;x<2;x++)
   {
    if(input[length-x-1]=='=')
     temp++;
   }
   paddingCount=temp;

   blockCount=length/4;
   length2=blockCount*3;
  }

  public byte[] GetDecoded()
  {
   byte[] buffer=new byte[length];
   byte[] buffer2=new byte[length2];

   for(int x=0;x<length;x++)
   {
    buffer[x]=char2sixbit(source[x]);
   }

   byte b, b1,b2,b3;
   byte temp1, temp2, temp3, temp4;

   for(int x=0;x<blockCount;x++)
   {
    temp1=buffer[x*4];
    temp2=buffer[x*4+1];
    temp3=buffer[x*4+2];
    temp4=buffer[x*4+3];       

    b=(byte)(temp1<<2);
    b1=(byte)((temp2 & 48)>>4);
    b1+=b;

    b=(byte)((temp2 & 15)<<4);
    b2=(byte)((temp3 & 60)>>2);
    b2+=b;

    b=(byte)((temp3 & 3)<<6);
    b3=temp4;
    b3+=b;

    buffer2[x*3]=b1;
    buffer2[x*3+1]=b2;
    buffer2[x*3+2]=b3;
   }

   length3=length2-paddingCount;
   byte[] result=new byte[length3];

   for(int x=0;x<length3;x++)
   {
    result[x]=buffer2[x];
   }

   return result;
  }

  private byte char2sixbit(char c)
  {
   char[] lookupTable=new char[64]
    { 

     'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
     'O','P','Q','R','S','T','U','V','W','X','Y', 'Z',
     'a','b','c','d','e','f','g','h','i','j','k','l','m','n',
     'o','p','q','r','s','t','u','v','w','x','y','z',
     '0','1','2','3','4','5','6','7','8','9','+','/'};
   if(c=='=')
    return 0;
   else
   {
    for (int x=0;x<64;x++)
    {
     if (lookupTable[x]==c)
      return (byte)x;
    }

    return 0;
   }

  }

 }
}

 

Android Base64Encoder解决方案

public class Base64Encoder { private static final char last2byte = (char) Integer .parseInt("000...
  • sxsj333
  • sxsj333
  • 2015年01月12日 12:58
  • 7893

利用 BASE64Encoder 对字符串进行加密 BASE64Decoder进行解密

import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class TestEncrypt { public s...
  • chenyongtu110
  • chenyongtu110
  • 2016年06月16日 20:07
  • 7391

BASE64Decoder替代类Base64

之前base64加密用的是sun公司的sun.misc.BASE64Encoder/BASE64Decoder,由于后面版本更新,sun公司被oracle公司收购,加密类BASE64Encoder被o...
  • HaleyLiu123
  • HaleyLiu123
  • 2017年10月23日 12:10
  • 102

BASE64Decoder 替代类 Base64

sun.misc.BASE64Encoder/BASE64Decoder 替代类 org.apache.commons.codec.binary.Base64
  • unimme
  • unimme
  • 2015年07月19日 20:11
  • 2990

Android BASE64Encoder不能用的问题

昨天项目与后台交互的接口传参数需要加密,用的是BASE64Encoder加密,可是这个类不能用,谷歌了一下说的是: sun.misc.BASE64Encoder/BASE64Decoder类不属于J...
  • u010967188
  • u010967188
  • 2017年01月07日 11:21
  • 2077

sun.misc.BASE64Encoder存在的问题及其解决方法

问题背景:          最近在开发中用到了sun.misc.BASE64Encoder。发现两个问题:       其一、当编码的字节较长时,encode出来的字符串会自动加入\n\r进行自...
  • w412748643
  • w412748643
  • 2015年06月01日 15:14
  • 1059

关于Base64工具类并发问题

BASE64 编码是一种常用的字符编码,在很多地方都会用到。JDK 中提供了非常方便的 BASE64Encoder 和 BASE64Decoder,用它们可以非常方便的完成基于 BASE64 的编码和...
  • jasontome
  • jasontome
  • 2011年09月08日 09:27
  • 1008

BASE64Encoder

package com.avetti.util;/*** A Base64 Encoder/Decoder.** * This class is used to encode and decode d...
  • lycgxy
  • lycgxy
  • 2009年08月06日 09:39
  • 2994

解决Eclipse中无法直接使用Base64Encoder的问题

Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder类。这个类是sun公...
  • u011514810
  • u011514810
  • 2017年05月25日 14:14
  • 2102

BASE64Encoder及BASE64Decoder的正确用法

原文地址: http://blog.sina.com.cn/s/blog_5a6efa330102v8st.html 一直以来Base64的加密解密都是使用sun.misc包下的BA...
  • NRlovestudy
  • NRlovestudy
  • 2015年08月18日 13:59
  • 4688
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: Base64Encoder
举报原因:
原因补充:

(最多只允许输入30个字)