首页 > 其他 > 详细

base64解码

时间:2014-03-01 00:48:28      阅读:527      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
// 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;
}
bubuko.com,布布扣

运行效果:

bubuko.com,布布扣

 

base64解码,布布扣,bubuko.com

base64解码

原文:http://www.cnblogs.com/liyou-blog/p/3573168.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!