[Mono-list] Convert Base64 to String

Paul Oremland paul at oremland.net
Thu Mar 23 16:10:32 EST 2006


I found an example on copdeproject once on how to decode base64 strings. 
Here's the class I wrote using that logic and an example on how to 
decode base64 with that class.

Here's the Base64 decoder class:

         public class Base64Decoder
         {
                 char[] source;
                 int length, length2, length3;
                 int blockCount;
                 int paddingCount;
                 public Base64Decoder(char[] input)
                 {
                         int temp=0;
                         source=input;
                         length=input.Length;

                         //find how many padding are there
                         for (int x=0;x<2;x++)
                         {
                                 if(input[length-x-1]=='=')
                                         temp++;
                         }
                         paddingCount=temp;
                         //calculate the blockCount;
                         //assuming all whitespace and carriage 
returns/newline were removed.
                         blockCount=length/4;
                         length2=blockCount*3;
                 }

                 public byte[] GetDecoded()
                 {
                         byte[] buffer=new byte[length];//first 
conversion result
                         byte[] buffer2=new byte[length2];//decoded 
array with padding

                         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;
                         }
                         //remove paddings
                         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;
                                 }
                                 //should not reach here
                                 return 0;
                         }

                 }

         }




using that class you can decode a base 64 string like:

string base64StringToDecode = "SOME BASE64 STRING";
char[] data = base64StringToDecode.ToCharArray();
Base64Decoder myDecoder = new Base64Decoder(data);
StringBuilder sb=new StringBuilder();
byte[] temp = myDecoder.GetDecoded();
sb.Append(UTF8Encoding.UTF8.GetChars(temp));
string decodedString = sb.ToString();


Hope that helps.....


-- 
-----------------
Paul Oremland
paul at oremland.net

"We are what we pretend to be, so we must be careful about what we pretend
to be." - Kurt Vonnegut


Steven Bell wrote:
> Is it possible with Mono and C# to convert from Base64 to a string?
> I noticed in Monodevelop that Convert.FromBase64FromString isn't 
> implemented yet.
> I was wondering if there is another way.
> 
> Thanks.
> Steve
> 
> This email message and any files transmitted with it contain information
> which is confidential and intended only for the addressee(s). If you are
> not the intended recipient(s), any usage,  dissemination, disclosure, or
> action taken in  reliance on it is prohibited.  The reliability of  this
> method of communication cannot be guaranteed.  Email can be intercepted,
> corrupted, delayed, incompletely transmitted, virus-laden,  or otherwise
> affected during transmission. Reasonable steps have been taken to reduce
> the risk of viruses, but we cannot accept liability for damage sustained
> as a result of this message. If you have received this message in error,
> please immediately delete it and all copies of it and notify the sender.
> _______________________________________________
> Mono-list maillist  -  Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list


More information about the Mono-list mailing list