在C语言中使用libb64进行Base64编解码
libb64下载地址http://sourceforge.net/projects/libb64
以下为Demo
libb64_demo.c
#include <stdio.h>
#include <string.h>
#include <libb64/cencode.h>
#include <libb64/cdecode.h>
void base64EncodeString(const char *textToEncode, char *buffer);
void base64DecodeString(const char *codeToDecode, char *buffer);
void base64EncodeFile(FILE *fileToEncode, FILE *encodedFile);
void base64DecodeFile(FILE *encodedFile, FILE *decodedFile);
int main()
{
const char *text = "Matt Damon";
char buffer[];
base64EncodeString(text, buffer);
printf("%s", buffer);
const char *code = "R29vZCBXaWxsIEh1bnRpbmc=";
base64DecodeString(code, buffer);
printf("%s\n", buffer);
const char *inputFilename = "易语言5.2修正版.rar";
FILE *inputFile = fopen(inputFilename, "rb");
if (inputFile)
{
const char *encodedFilename = "易语言5.2修正版.rar.txt";
FILE *encodedFile = fopen(encodedFilename, "wb");
if (encodedFile)
{
base64EncodeFile(inputFile, encodedFile);
fclose(encodedFile);
}
else
printf("Cannot open file: %s\n", encodedFile);
fclose(inputFile);
}
else
printf("Cannot open file: %s\n", inputFilename);
const char *encodedFilename = "360DrvMgrInstaller_net.exe.txt";
FILE *encodedFile = fopen(encodedFilename, "rb");
if (encodedFile)
{
const char *decodedFilename = "360DrvMgrInstaller_net";
FILE *decodedFile = fopen(decodedFilename, "wb");
if (decodedFile)
{
base64DecodeFile(encodedFile, decodedFile);
fclose(decodedFile);
}
else
printf("Cannot open file: %s\n", decodedFile);
fclose(encodedFile);
}
else
printf("Cannot open file: %s\n", encodedFilename);
system("pause");
return ;
}
void base64EncodeString(const char *textToEncode, char *buffer)
{
base64_encodestate state;
base64_init_encodestate(&state);
int numberOfBytesEncoded = base64_encode_block(textToEncode, strlen(textToEncode), buffer, &state);
numberOfBytesEncoded += base64_encode_blockend(buffer + numberOfBytesEncoded, &state);
buffer[numberOfBytesEncoded] = '\0';
}
void base64DecodeString(const char *codeToDecode, char *buffer)
{
base64_decodestate state;
base64_init_decodestate(&state);
int numberOfCharactersDecoded = base64_decode_block(codeToDecode, strlen(codeToDecode), buffer, &state);
buffer[numberOfCharactersDecoded] = '\0';
}
void base64EncodeFile(FILE *fileToEncode, FILE *encodedFile)
{
char readBuffer[];
char encodedBuffer[];
int numberOfBytesEncoded;
base64_encodestate state;
base64_init_encodestate(&state);
while (!feof(fileToEncode))
{
size_t numberOfObjects = fread(readBuffer, sizeof(char), , fileToEncode);
numberOfBytesEncoded = base64_encode_block(readBuffer, numberOfObjects, encodedBuffer, &state);
fwrite(encodedBuffer, sizeof(char), numberOfBytesEncoded, encodedFile);
}
numberOfBytesEncoded = base64_encode_blockend(encodedBuffer, &state);
fwrite(encodedBuffer, sizeof(char), numberOfBytesEncoded, encodedFile);
}
void base64DecodeFile(FILE *encodedFile, FILE *decodedFile)
{
char inputBuffer[];
char decodedBuffer[];
int numberOfBytesDecoded;
base64_decodestate state;
base64_init_decodestate(&state);
while (!feof(encodedFile))
{
size_t numberOfCharacters = fread(inputBuffer, sizeof(char), , encodedFile);
numberOfBytesDecoded = base64_decode_block(inputBuffer, numberOfCharacters, decodedBuffer, &state);
fwrite(decodedBuffer, sizeof(char), numberOfBytesDecoded, decodedFile);
}
}
在C语言中使用libb64进行Base64编解码的更多相关文章
- Python语言中对于json数据的编解码——Usage of json a Python standard library
一.概述 1.1 关于JSON数据格式 JSON (JavaScript Object Notation), specified by RFC 7159 (which obsoletes RFC 46 ...
- C++,Base64编解码字符串或文件
参考链接:在C语言中使用libb64进行Base64编解码 GitHub地址:https://github.com/BuYishi/cpp_base64_demo base64_demo.cpp #i ...
- ios Base64编解码工具类及使用
为了避免明码传递http内容,可以用base64编码后传输,收到方再解码,也方便了2进制数据的字符串式传输. 对于ios来说,google给提供了一个很好的工具类,方便进行base64编解码,当然也可 ...
- Java实现BASE64编解码
Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...
- Delphi 自带的 Base64 编解码函数
今天帮别人解决一个关于 Base64 编解码的问题,竟然发现 Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个 ...
- openssl命令行Base64编解码
openssl对base64编解码的规范支持较差,用它编解码的结果别的语言如php处理很不方便,注意的几点整理如下 1,如果php加密结果做base64编码长度小于64,则需要添加一个换行符opens ...
- EasyDarwin开源流媒体云平台中boost Base64编解码后与源长度不匹配的bug
本文转自EasyDarwin团队Alex的博客:http://blog.csdn.net/cai6811376 EasyDarwin云平台中部分协议使用了Base64编码昨晚报文通信的载体.比如在对摄 ...
- 【VBA研究】如何用Base64 编解码方法实现简单的加解密
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码,将数据变成字符串实现文本传输.由于编码简单,所以很容易实现,代码也是现成的.利用这个编码规则可以实现简单的加解密.编解码方 ...
- python3的base64编解码
使用python3的base64编解码实现字符串的简易加密解密 引言: 在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码,对拿到的响应 ...
随机推荐
- 使用ANT将Android打包成Jar包
本文主要实现使用ANT,将Android项目打包成jar,为方便其他项目使用. ANT可以去官网下载(http://ant.apache.org/) 先介绍打包的步骤,打包脚本下方贴出 步骤: 1,将 ...
- 【Luogu】P1516青蛙的约会(线性同余方程,扩展欧几里得)
题目链接 定理:对于方程\(ax+by=c\),等价于\(a*x=c(mod b)\),有整数解的充分必要条件是c是gcd(a,b)的整数倍. ——信息学奥赛之数学一本通 避免侵权.哈哈. 两只青蛙跳 ...
- 【Vijos1250】最勇敢的机器人(并查集,分组背包DP)
题意:有N个物品,承重上限为M,有K组物品互斥关系,互斥关系有传递性,即1与2互斥,2与3互斥,1与3也互斥 给出每个物品的花费和价值,求承重上限内的最大价值总和 n<=1000,m<=1 ...
- npm start 修改启动端口的不同方式
antd的启动配置文件基于package.json文件,配合roadhog使用时,启动配置是: "scripts": { "start": "road ...
- (25)python urllib库
urllib包包含4个模块,在python3里urllib导入要用包名加模块名的方式. 1.urllib.request 该模块主要用于打开HTTP协议的URL import urllib.reque ...
- Maven实战:Pom.xml详解
什么是pom? pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的u ...
- HDU 5636 Shortest Path(Floyd)
题目链接 HDU5636 n个点,其中编号相邻的两个点之间都有一条长度为1的边,然后除此之外还有3条长度为1的边. m个询问,每次询问求两个点之前的最短路. 我们把这三条边的6个点两两算最短路, 然 ...
- .net core webapi jwt 更为清爽的认证 ,续期很简单
我的方式非主流,控制却可以更加灵活,喜欢的朋友,不妨花一点时间学习一下 jwt认证分为两部分,第一部分是加密解密,第二部分是灵活的应用于中间件,我的处理方式是将获取token放到api的一个具体的co ...
- solr 简要笔记
创建搜索1 创建directory 2.分词器 analyzer 3indexwriter writer dic an 4.document doc.add writer.adddocument(do ...
- weblogic内存调整说明
一:WebLogic配置问题: 由于WebLogic的配置问题,我们的测试出现了失败情况.原因是为WebLogic分配的内存太少了.通过修改commom\bin\commEnv.cmd文件来增加内存 ...