- #include <stdio.h>
- #include <string.h>
- #include <openssl/evp.h>
-
-
- #define CHARS_PER_LINE_BASE64 65 //64+1(\r)
-
- void print(const char *promptStr,unsigned char *data,int len)
- {
- int i;
- printf("======%s[长度=%d]======\n",promptStr,len);
- for(i = 0; i < len; i++) printf("%02x", data[i]);
- printf("\n===============\n");
- }
-
-
- void encode(unsigned char* outData,
- int * outlen,
- const unsigned char* data,
- int datalen)
- {
- int tmp=0;
- EVP_ENCODE_CTX base64;
- EVP_EncodeInit(&base64);
-
- EVP_EncodeUpdate(&base64,
- outData,
- outlen,
- data,
- datalen
- );
- tmp=*outlen;
-
- EVP_EncodeFinal(&base64,outData+*outlen,outlen);
- *outlen+=tmp;
- outData[*outlen]=0;
- printf("base64编码后:",outData,*outlen);
- }
-
-
- bool decode(unsigned char* outData,
- int * outlen,
- const unsigned char* data,
- int datalen)
- {
- int tmp=0,i=0,lines=0,currpos=0;
- EVP_ENCODE_CTX base64;
- EVP_DecodeInit(&base64);
-
- for (;;)
- {
- currpos+=CHARS_PER_LINE_BASE64*lines++;
-
-
- i=EVP_DecodeUpdate(&base64,
- outData+tmp,
- outlen,
- data+currpos,
- datalen-currpos);
- if (i < 0)
- {
- printf("解码错误!\n");
- return false;
- }
- tmp+=*outlen;
- if (i == 0) break;
- }
-
- EVP_DecodeFinal(&base64,outData+tmp,outlen);
- *outlen=tmp;
- outData[*outlen]=0;
- print("base64解码后:",outData,*outlen);
- return true;
- }
-
关闭
站长推荐 /6
|