boost库实现Base64编解码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nk_wang/article/details/50405704

 

Base64介绍

Base64是一种基于64个可打印字符来表示二进制数据的表示方法,从本质上看Base64编码就是将三字节转换为四字节,如果数据的长度不是3的整数倍,就要在后面补0再计算,每补2个0就再Base64串后加上1个‘=’。

boost库Base64

boost库对Base64编解码进行很了很好的封装,以下代码用boost库实现Base64编解码

//boost库引用文件
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/binary_from_base64.hpp>
#include <boost/archive/iterators/transform_width.hpp>
//标准库
#include <iostream>
#include <string>
#include <sstream>

using namespace std;
using namespace boost::archive::iterators;

//Base64编码
bool Base64Encode(string * outPut, const string & inPut);
//Base64解码
bool Base64Decode(string * outPut, const string & inPut);
int main(void)
{
	
	cout<<"***************************************"<<endl;
	cout<<"*       boost库Base64编码解码         *"<<endl;
	cout<<"***************************************"<<endl;

	string inputstr = "http://blog.csdn.net/nk_wang/article/details/44536269/\n#@$%^^&**(*(())+=";
	//Base64编码
	string Output;
	string Input;
	cout<<"Base64编码前:"<<inputstr<<endl;
	Base64Encode(&Output,inputstr);
	cout<<"Base64编码后:"<<Output<<endl;
	//Base64解码
	cout<<"Base64解码前:"<<Output<<endl;
	Base64Decode(&Input,Output);
	cout<<"Base64解码后:"<<Input<<endl;
	return 0;
}

bool Base64Encode(string * outPut, const string & inPut)
{
	typedef base64_from_binary<transform_width<string::const_iterator,6,8>> Base64EncodeIter;
	 
	stringstream  result;
	copy(Base64EncodeIter(inPut.begin()),
		Base64EncodeIter(inPut.end()),
		ostream_iterator<char>(result));
	
	size_t Num = (3 - inPut.length() % 3) % 3;
	for (size_t i = 0; i < Num; i++)
	{
		result.put('=');
	}
	*outPut = result.str();
	return outPut->empty() == false;
}
bool Base64Decode(string * outPut, const string & inPut)
{
	typedef transform_width<binary_from_base64<string::const_iterator>,8,6> Base64DecodeIter;

	stringstream result;
	try
	{
		copy(Base64DecodeIter(inPut.begin()),
			Base64DecodeIter(inPut.end()),
			ostream_iterator<char>(result));
	}
	catch (...)
	{
		return false;
	}
	*outPut = result.str();
	return outPut->empty() == false;
}


以上代码是实结果如下图所示

猜你喜欢

转载自blog.csdn.net/nk_wang/article/details/50405704