Base64加密/解密(C ++ Builder XE)

时间:2014-03-14 03:02:57

标签: c++ c++builder

我需要在C ++ Builder XE中加密字符串内容,并在互联网上找到此代码:

AnsiString Base64Encode(AnsiString slToEnc)
      {
        //The Base64 Table
        const char Base64Table[64]=
          "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        char * buftoenc = slToEnc.c_str();
        int bufsize = slToEnc.Length() + 1;
        char * encbuf = new char[slToEnc.Length() * 5];
        encbuf[0] = '\0';  int ilStrLen = -1;
        int i=0; int b64byte[5];
        unsigned char *buftemp;
        AnsiString slRetVal = EmptyStr;
        buftemp=(unsigned char *)malloc(bufsize+2);
        strcpy(buftemp,buftoenc);

        if (fmod(bufsize,3)==1)
        {
          buftemp[bufsize]='\0';
          buftemp[bufsize+1]='\0';
        }

        if (fmod(bufsize,3)==2)buftemp[bufsize]='\0';

        while (i<bufsize)
        {
          b64byte[0]=buftemp[i]>>2;
          b64byte[1]=((buftemp[i]&3)<<4)|(buftemp[i+1]>>4);
          b64byte[2]=((buftemp[i+1]&0x0F)<<2)|(buftemp[i+2]>>6);
          b64byte[3]=buftemp[i+2]&0x3F;
          encbuf[i+(i/3)]=Base64Table[b64byte[0]];
          encbuf[i+(i/3)+1]=Base64Table[b64byte[1]];
          encbuf[i+(i/3)+2]=Base64Table[b64byte[2]];
          encbuf[i+(i/3)+3]=Base64Table[b64byte[3]];
          i+=3;
        }

        free(buftemp);

        if (fmod(bufsize,3)==0) ilStrLen = bufsize*8/6;
        else if (fmod(bufsize,3)==1) ilStrLen = ((bufsize+2)*8/6)-2;
        else if (fmod(bufsize,3)==2) ilStrLen = ((bufsize+1)*8/6)-1;
        else ilStrLen = -1;

        if(ilStrLen> 0) slRetVal = AnsiString(encbuf).SubString(1, ilStrLen);
        if(encbuf != NULL) { delete encbuf; encbuf = NULL; }

        return slRetVal;
      }

// Calling function in a button component =>

Base64Encode(Memo1->Text);

但它在编译时会产生一个小错误,引用此源代码中函数std :: fmod(double,double)与math.h库的相同函数之间的歧义。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

为了解决歧义,您需要为fmod函数指定名称空间。只需更改一行:

if (fmod(bufsize,3)==1)

为:

if (std::fmod(bufsize,3)==1)

它应该为你编译。

答案 1 :(得分:0)

我的版本是C ++ Builder的base64的简单快速编码器(解码器)。

&hellip;

答案 2 :(得分:0)

您可以使用http://docwiki.embarcadero.com/Libraries/Rio/en/System.NetEncoding.TBase64Encoding

TBase64Encoding* enc = new TBase64Encoding();
UnicodeString decoded = enc->Decode(encoded);
delete enc;

TBase64Encoding* enc = new TBase64Encoding();
UnicodeString encoded = enc->Encode(whatever);
delete enc;