How do I base64 encode (decode) in C?

后端 未结 17 1855
孤城傲影
孤城傲影 2020-11-22 06:27

I have binary data in an unsigned char variable. I need to convert them to PEM base64 in c. I looked in openssl library but i could not find any function. Does any body have

17条回答
  •  梦谈多话
    2020-11-22 06:58

    Here's the decoder I've been using for years...

        static const char  table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        static const int   BASE64_INPUT_SIZE = 57;
    
        BOOL isbase64(char c)
        {
           return c && strchr(table, c) != NULL;
        }
    
        inline char value(char c)
        {
           const char *p = strchr(table, c);
           if(p) {
              return p-table;
           } else {
              return 0;
           }
        }
    
        int UnBase64(unsigned char *dest, const unsigned char *src, int srclen)
        {
           *dest = 0;
           if(*src == 0) 
           {
              return 0;
           }
           unsigned char *p = dest;
           do
           {
    
              char a = value(src[0]);
              char b = value(src[1]);
              char c = value(src[2]);
              char d = value(src[3]);
              *p++ = (a << 2) | (b >> 4);
              *p++ = (b << 4) | (c >> 2);
              *p++ = (c << 6) | d;
              if(!isbase64(src[1])) 
              {
                 p -= 2;
                 break;
              } 
              else if(!isbase64(src[2])) 
              {
                 p -= 2;
                 break;
              } 
              else if(!isbase64(src[3])) 
              {
                 p--;
                 break;
              }
              src += 4;
              while(*src && (*src == 13 || *src == 10)) src++;
           }
           while(srclen-= 4);
           *p = 0;
           return p-dest;
        }
    

提交回复
热议问题