在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编码,对拿到的响应 ...
随机推荐
- Codeforces Round #361 (Div. 2)——B. Mike and Shortcuts(BFS+小坑)
B. Mike and Shortcuts time limit per test 3 seconds memory limit per test 256 megabytes input standa ...
- POJ 1502 MPI Maelstrom【floyd】
题目大意:求点1到所有点最短路径的最大值 思路:水题,单源最短路,网上解题清一色dijkstra,但是点数小于100显然floyd更简洁嘛 #include<cstdio> #includ ...
- 学习shell脚本之乘法口诀
脚本如下: #!/bin/bash for i in 'seq 1 9' do for j in 'seq 1 $i' do k=$[$i*$j] echo -ne "$j"&qu ...
- dockerfile各种命令解析
1.ADD命令,如果ADD的是压缩包,ADD之后会自动进行解压.....
- 虚拟机vmnet0、vmnet1和vmnet8的区别 虚拟网卡概述
vmnet0,实际上就是一个虚拟的网桥 vmnet0,实际上就是一个虚拟的网桥,这个网桥有很若干个端口,一个端口用于连接你的Host,一个端口用于连接你的虚拟机,他们的位置是对等的,谁也不是谁的网关. ...
- Split The Tree
Split The Tree 时间限制: 1 Sec 内存限制: 128 MB 题目描述 You are given a tree with n vertices, numbered from 1 ...
- Goldbach
Description: Goldbach's conjecture is one of the oldest and best-known unsolved problems in number t ...
- 仓库建设(bzoj 1096)
Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用.突然有一天, ...
- 转载 cc、gcc、g++、CC的区别概括
gcc是C编译器:g++是C++编译器:linux下cc一般是一个符号连接,指向gcc:gcc和g++都是GUN(组织)的编译器.而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Lin ...
- Laravel 静态资源管理
<link rel="stylesheet" href="{{ asset('bootstrap/css/bootstrap.min.css') }}" ...