参考链接:在C语言中使用libb64进行Base64编解码

GitHub地址:https://github.com/BuYishi/cpp_base64_demo

base64_demo.cpp

#include <iostream>
#include <fstream>
#include "Base64Encoder.h"
#include "Base64Decoder.h"
using namespace std;
void encodeDemo();
void decodeDemo();
int main()
{
encodeDemo();
decodeDemo();
system("pause");
return ;
}
void encodeDemo()
{
const char *text = "John Rambo";
Base64Encoder encoder;
const string &encodedText = encoder.encode(text);
cout << encodedText << endl;
string inputFilename("E:/Packages/Java/jdk-8u144-windows-x64.exe");
ifstream ifs(inputFilename, ifstream::binary);
if (ifs)
{
string encodedFilename(inputFilename + ".txt");
ofstream ofs(encodedFilename, ofstream::binary);
if (ofs)
{
streamsize numberOfBytesRead;
int numberOfBytesEncoded;
constexpr int inputBufferSize = * ;
char inputBuffer[inputBufferSize];
char encodedBuffer[inputBufferSize * ];
while (!ifs.eof())
{
numberOfBytesRead = ifs.read(inputBuffer, inputBufferSize).gcount();
numberOfBytesEncoded = encoder.encode(inputBuffer, numberOfBytesRead, encodedBuffer);
ofs.write(encodedBuffer, numberOfBytesEncoded);
}
numberOfBytesEncoded = encoder.encodeEnd(encodedBuffer);
ofs.write(encodedBuffer, numberOfBytesEncoded);
}
else
cout << "Cannot open file: " << encodedFilename << endl;;
}
else
cout << "Cannot open file: " << inputFilename << endl;
}
void decodeDemo()
{
Base64Decoder decoder;
const string &decodedText = decoder.decode("QWxsIGlzIHdlbGwh");
cout << decodedText << endl;
string filename("E:/Packages/Android/docs-24_r01.zip.txt");
ifstream ifs(filename, ifstream::binary);
if (ifs)
{
filename = "android_docoment";
ofstream ofs(filename, ofstream::out | ofstream::binary);
if (ofs)
{
streamsize numberOfBytesRead;
int numberOfBytesDecoded;
constexpr int bufferSize = * ;
char inputBuffer[bufferSize];
char decodedBuffer[bufferSize];
while (!ifs.eof())
{
numberOfBytesRead = ifs.read(inputBuffer, ).gcount();
numberOfBytesDecoded = decoder.decode(inputBuffer, numberOfBytesRead, decodedBuffer);
ofs.write(decodedBuffer, numberOfBytesDecoded);
}
}
else
cout << "Cannot open file: " << filename << endl;
}
else
cout << "Cannot open file: " << filename << endl;
}

Base64Encoder.h

#ifndef BASE64_ENCODER_H
#define BASE64_ENCODER_H
#include <string>
extern "C"
{
#include <libb64/cencode.h>
}
class Base64Encoder
{
public:
Base64Encoder();
std::string encode(const std::string &text);
int encode(const char *inputBuffer, unsigned count, char *encodedBuffer);
int encodeEnd(char *encodedBuffer);
private:
base64_encodestate state;
};
#endif

Base64Encoder.cpp

#include "Base64Encoder.h"
Base64Encoder::Base64Encoder() { base64_init_encodestate(&state); }
std::string Base64Encoder::encode(const std::string &text)
{
char *buffer = new char[text.length() * ];
int numberOfBytesEncoded = base64_encode_block(text.c_str(), text.length(), buffer, &state);
numberOfBytesEncoded += base64_encode_blockend(buffer + numberOfBytesEncoded, &state);
buffer[numberOfBytesEncoded] = '\0';
std::string result(buffer);
delete[] buffer;
base64_init_encodestate(&state);
return result;
}
int Base64Encoder::encode(const char *inputBuffer, unsigned count, char *encodedBuffer)
{
return base64_encode_block(inputBuffer, count, encodedBuffer, &state);
}
int Base64Encoder::encodeEnd(char *encodedBuffer)
{
return base64_encode_blockend(encodedBuffer, &state);
}

Base64Decoder.h

#ifndef BASE64_DECODER_H
#define BASE64_DECODER_H
#include <string>
extern "C"
{
#include <libb64/cdecode.h>
}
class Base64Decoder
{
public:
Base64Decoder();
std::string decode(const std::string &code);
int decode(const char *inputBuffer, int count, char *decodedBuffer);
private:
base64_decodestate state;
};
#endif

Base64Decoder.cpp

#include "Base64Decoder.h"
Base64Decoder::Base64Decoder() { base64_init_decodestate(&state); }
std::string Base64Decoder::decode(const std::string &code)
{
char *buffer = new char[code.length()];
int numberOfCharacters = base64_decode_block(code.c_str(), code.length(), buffer, &state);
buffer[numberOfCharacters] = '\0';
std::string result(buffer);
delete[] buffer;
return result;
}
int Base64Decoder::decode(const char *inputBuffer, int count, char *decodedBuffer)
{
return base64_decode_block(inputBuffer, count, decodedBuffer, &state);
}

C++,Base64编解码字符串或文件的更多相关文章

  1. C#字符串Base64编解码

    C#字符串Base64编解码 首先讲一下什么是Base64编码所谓Base64就是一种基于64个可打印字符来表示二进制数据的方法.Base64编码是从二进制到字符的过程,常用于在网络上传输不可见字符( ...

  2. ios Base64编解码工具类及使用

    为了避免明码传递http内容,可以用base64编码后传输,收到方再解码,也方便了2进制数据的字符串式传输. 对于ios来说,google给提供了一个很好的工具类,方便进行base64编解码,当然也可 ...

  3. Delphi Base64 编解码函数

    Delphi 自带 Base64 编解码的单元, EncdDecd这个单元提供两套四个公开函数: 对流的编解码:procedure EncodeStream(Input, Output: TStrea ...

  4. Java实现BASE64编解码

    Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...

  5. Delphi 自带的 Base64 编解码函数

    今天帮别人解决一个关于 Base64 编解码的问题,竟然发现 Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个 ...

  6. python rsa 加密解密 (编解码,base64编解码)

    最近有需求,需要研究一下RSA加密解密安全:在网上百度了一下例子文章,很少有文章介绍怎么保存.传输.打印加密后的文本信息,都是千篇一律的.直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密.仔 ...

  7. python base64 编解码,转换成Opencv,PIL.Image图片格式

    二进制打开图片文件,base64编解码,转成Opencv格式: # coding: utf-8 import base64 import numpy as np import cv2 img_file ...

  8. 【VBA研究】如何用Base64 编解码方法实现简单的加解密

    Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码,将数据变成字符串实现文本传输.由于编码简单,所以很容易实现,代码也是现成的.利用这个编码规则可以实现简单的加解密.编解码方 ...

  9. OpenSSL aes加解密实例+base64编解码

    OpenSSL aes加解密简单实例+base64编解码 #include <stdio.h> #include <string.h> #include <memory. ...

随机推荐

  1. 转载:hmm学习网站

    http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5

  2. [转]UITableView全面解析

      转自:http://www.cnblogs.com/kenshincui/p/3931948.html#mvc 概述 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软 ...

  3. jquery实现表单验证,所以的验证通过后方可提交

    <html>     <head>         <meta http-equiv="content-type" content="tex ...

  4. MongoDB增删改查操作详解(命令行)

    一.插入 MongoDB的插入操作很简单,使用insert方法,这里演示从创建数据库.创建集合到插入文档.查询文档. 集合创建方法参数说明: size:集合最大空间 max:集合最多文档数量 (超出s ...

  5. MYsql 锁详解 锁 与索引的关系

    原文:http://blog.csdn.net/xifeijian/article/details/20313977#t10   mysql innodb的锁是通过锁索引来实现的.   select ...

  6. CSS3 伪类选择器 nth-child() 的用法

    伪类选择器 nth-child() 在IE6-8和FF3.0-浏览器不支持,CSS3中nth-of-type(n)(比如nth-of-type(1))这个特殊的类选择符可以样式更加个性的标题和段落等, ...

  7. codevs——1065 01字符串

    1065 01字符串  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 输出仅有0和1组成的长度为n的字符串, ...

  8. nginx源码学习资源(不断更新)转

    原文地址:http://www.cnblogs.com/yjf512/archive/2012/06/13/2548515.html nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx ...

  9. 求菲波那契数列的第n个数

    1,2,3,5,8,13..... 求第n个数 def get_num(n): if n == 1: return 1 if n == 2: return 2 return get_num(n - 1 ...

  10. ubuntu 14.04安装nodejs

    http://stackoverflow.com/questions/32902699/cannot-install-ember-on-ubuntu-1404/33495134