// temp.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Windows.h> #include <math.h> #include <openssl/pem.h> #pragma comment(lib, "ssleay32.lib") #pragma comment(lib, "libeay32.lib") #include <iostream> #include <string> using namespace std; string bc_base64_encode(char *data) { BIO *b64 = BIO_new(BIO_f_base64()); BIO *bio = BIO_new(BIO_s_mem()); bio = BIO_push(b64, bio); BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); BIO_write(bio, data, strlen(data)); //把data数据写入bio,即是做编码操作。 BIO_ctrl(bio, BIO_CTRL_FLUSH, 0, NULL); BUF_MEM *bptr = NULL; BIO_get_mem_ptr(bio, &bptr); size_t slen = bptr->length; string mdStr(slen+1, NULL); char* head=(char*)mdStr.data(); memcpy(head, bptr->data, slen); head[slen] = ‘\0‘; BIO_free_all(bio); return mdStr; } string bc_base64_decode(char *data) { string srcstr(50,NULL); BIO *bio, *b64, *bio_out; int inlen; b64 = BIO_new(BIO_f_base64()); bio = BIO_new_mem_buf(data,strlen(data)); bio = BIO_push(b64, bio); BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); int len=BIO_read(bio, (char*)srcstr.data(), 50); //把数据从bio里读出到data,即是做解码操作。 BIO_free_all(bio); return srcstr; } int _tmain(int argc, _TCHAR* argv[]) { char* src="Hello World \n"; string mdstr=bc_base64_encode(src); string srcstr=bc_base64_decode((char*)mdstr.data()); cout<<"64编码:"<<mdstr<<endl<<"64解码:"<<srcstr<<endl<<endl; if (strcmp(src,srcstr.data())==0) { cout<<"解码后的数据和原始数据相同"<<endl; } else { cout<<"解码后的数据和原始数据 有差异。。。"<<endl; } getchar(); return 0; }
运行效果:
完
原文:http://www.cnblogs.com/liyou-blog/p/3573168.html