Base64编码解码的实现(C语言)

C语言实现Base64编解码(加密和解密) Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3 * 8 = 4 * 6 = 24),然后把6Bit再添加两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。Base64的编码转换表。字符串 - hello。 阅读详情

base64编码解码的实现(C语言)




 /****************************************************************

This is a sample routine of base64 algorithm.The goal is to


illustrate principles,so some details may be ignored.


Author email:zhangwu2003@163.com


*****************************************************************/


#include <stdio.h>


#include <string.h>


#include <malloc.h>


char*

ch64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

unsigned char *encode(unsigned char *src,int srclen)


{


int n,buflen,i,j;


int pading=0;


unsigned char *buf;


static unsigned char *dst;

buf=src;


buflen=n=srclen;


if(n%3!=0)   /* pad with ´=´ by using a temp buffer */


{


   pading=1;


   buflen=n+3-n%3;


   buf=malloc(buflen+1);


   memset(buf,0,buflen+1);


   memcpy(buf,src,n);


   for(i=0;i<3-n%3;i++)


    buf[n+i]=´=´;


}


dst=malloc(buflen*4/3+1);


memset(dst,0,buflen*4/3+1);


for(i=0,j=0;i<buflen;i+=3,j+=4)


{


   dst[j]=(buf[i]&0xFC)>>2;


   dst[j+1]=((buf[i]&0x03)<<4) + ((buf[i+1]&0xF0)>>4);


   dst[j+2]=((buf[i+1]&0x0F)<<2) + ((buf[i+2]&0xC0)>>6);


   dst[j+3]=buf[i+2]&0x3F;


}


for(i=0;i<buflen*4/3;i++) /* map 6 bit value to base64 ASCII character */


   dst[i]=ch64[dst[i]];


if(pading)


   free(buf);


return dst;


}

unsigned char *decode(unsigned char *src)


{


int n,i,j;


unsigned char *p;


static unsigned char *dst;

n=strlen(src);


for(i=0;i<n;i++) /* map base64 ASCII character to 6 bit value */


{


   p=strchr(ch64,src[i]);


   if(!p)


    break;


   src[i]=p-ch64;


}


dst=malloc(n*3/4+1);


memset(dst,0,n*3/4+1);


for(i=0,j=0;i<n;i+=4,j+=3)


{


   dst[j]=(src[i]<<2) + ((src[i+1]&0x30)>>4);


   dst[j+1]=((src[i+1]&0x0F)<<4) + ((src[i+2]&0x3C)>>2);


   dst[j+2]=((src[i+2]&0x03)<<6) + src[i+3];


}


return dst;


}

void main()


{


// char *src="zhangwu张武";


char src[]={´1´,´2´,´3´,0,´a´,´b´,´*´,0,´A´,´B´,´$´};


unsigned char *dst1;


unsigned char *dst2;


unsigned int i;

dst1=encode(src,11); /* the second parameter must accord with the first one */


printf("%s/n",dst1);


dst2=decode(dst1);


for(i=0;i<_msize(dst2);i++)


   printf("%c",dst2[i]);

free(dst1);


free(dst2);


}

 

=================

 

base64编码的实现

int Base64Enc(char *buf, char*text,int size)
{
static char *base64_encoding = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int buflen = 0;

while(size>0)
{
*buf++ = base64_encoding[ (text[0] >> 2 ) & 0x3f];
if(size>2)
{
*buf++ = base64_encoding[((text[0] & 3) << 4) | (text[1] >> 4)];
*buf++ = base64_encoding[((text[1] & 0xF) << 2) | (text[2] >> 6)];
*buf++ = base64_encoding[text[2] & 0x3F];
}
else
{
switch(size)
{
case 1:
*buf++ = base64_encoding[(text[0] & 3) << 4 ];
*buf++ = '=';
*buf++ = '=';
break;
case 2:
*buf++ = base64_encoding[((text[0] & 3) << 4) | (text[1] >> 4)];
*buf++ = base64_encoding[((text[1] & 0x0F) << 2) | (text[2] >> 6)];
*buf++ = '=';
break;
}
}

text +=3;
size -=3;
buflen +=4;
}

*buf = 0;
return buflen;
}

base64解码的实现

char GetBase64Value(char ch)
{
if ((ch >= 'A') && (ch <= 'Z'))
return ch - 'A';
if ((ch >= 'a') && (ch <= 'z'))
return ch - 'a' + 26;
if ((ch >= '0') && (ch <= '9'))
return ch - '0' + 52;
switch (ch)
{
case '+':
return 62;
case '/':
return 63;
case '=': /* base64 padding */
return 0;
default:
return 0;
}
}

//进行base64解码输入应该是4的倍数(根据mime标准)
//如果不是4倍数返回错误
//注意 如果是最后一个字符 那么长度不准备 可能会多1
//返回buf长度
int Base64Dec(char *buf,char*text,int size)
{
if(size%4)
return -1;
unsigned char chunk[4];
int parsenum=0;

while(size>0)
{
chunk[0] = GetBase64Value(text[0]);
chunk[1] = GetBase64Value(text[1]);
chunk[2] = GetBase64Value(text[2]);
chunk[3] = GetBase64Value(text[3]);

*buf++ = (chunk[0] << 2) | (chunk[1] >> 4);
*buf++ = (chunk[1] << 4) | (chunk[2] >> 2);
*buf++ = (chunk[2] << 6) | (chunk[3]);

text+=4;
size-=4;
parsenum+=3;
}

return parsenum;
}

 
用C/C++实现Base64编码和解码 2022.12.19日,看了一下base64原理,然后想用代码实现一下,改了好久的bug终于完美成功了。 阅读详情

相关推荐

使用C语言实现Base64编码与解码

Base64是一种基于64个可打印字符来表示二进制数据的编码方法。它通常用于在HTTP协议、电子邮件和其他场合下,将小型数据(如文本)编码为只包含可打印字符的形式,以便于传输。在主函数中,我们首先输入一个字符串,并进行Base64编码。然后,我们使用Base64解码将其转换回原始文本,并输出结果。以上就是使用C语言实现Base64编码与解码的代码及其说明。通过这个程序,我们可以轻松地进行Base64编码和解码操作。注意:在使用完成后,需要释放动态分配的内存空间。使用C语言实现Base64编码与解码。

CyberSphinx的博客 518

C语言base64实现

c语言base641. base64 原理 1. base64 原理 Base64 算法的原理,是将输入流中的字节按每 3 个分为一组,然后 每次取 6 个比特,将其转换成表格中对应的数据,一直重复到没有剩余的字符为止,转换表格如下: 上面就是Base64的索引表,字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符,这是标准的Base64协议规定。在日常使用中还会看到“=”或“==”号出现在Base64的编码结果中,“=”在此是作为填充字符出现。 示例说明 以下图的表格为示例,具体分析当字符

2514804004的博客 8554

瑞萨单片机,把CS文件转换为CC

1、打开CC的软件: 点击坐上角的"START" 点击"Create New Project"的"GO": 导入工程: 如下图设置后,点击"Create" 2、进入到CC的开发界面: 可以看到原启动库文件以asm文件的方式直接出现在工程中: 删除新生成的main.c,保留导入的r_main.c(以你自己的代码为准): 注意添加所有的头文件路径: 点击"...

weixin_37611121的博客 1228

C语言 Base64算法

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128...

liuchunjie11的博客 5745

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解

摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重

IT深耕十余载,大道之简 864

GPS数据处理必备:IGS精密星历下载与使用全攻略(附武汉大学/CDDIS/CODE/GFZ地址)

本文为GPS/GNSS数据处理者提供了IGS精密星历的完整下载与使用指南。详细解析了最终、快速、超快速三种精密星历产品的区别与选择策略,并手把手教学如何从武汉大学、CDDIS、CODE、GFZ四大主流数据中心高效获取数据,涵盖文件命名规则解析及自动化下载脚本,助力科研与工程应用。

weixin_29234239的博客 684

base64编码解码原理和C语言实现

base64编解码原理和C语音实现

hwd00001的博客 5550

MAC 青花瓷(Charles)爪机HTTPS 抓包

前段时间跟之前的产品小姐姐聊天,小姐姐说开发让她抓包帮忙看下数据,然而自己又不会,那就来写一篇简易版的教程 冲冲冲! 手上只有mac电脑跟iPhone手机,只做苹果手机的抓包,android7.0以上版本也没法通过正常的抓htts的包,让安卓开发装个后门吧,不是安卓开发并不知道是啥,连上USB之后访问chrome://inspect/#devices就能很简单的抓包 一、准备工具等 青花瓷...

Promise的博客 1617

C语言实现Base64编码/解码

Bse64是一种以64个可打印字符对二进制数据进行编码的编码算法。base64在对数据进行编码时以三个8位字符型数据为一组,取这三个字符型数据的ASCII码,然后以6位为一组组成4个新的数据,这4个新的数据有6位,所以它的最大值为2^6=64。我们以4个6位数据的十进制数从base64表中得到最终编码后的字符。 Base64 编码表 Value Char Value Char Value Char Value Char 0 A 16 ...

自由的天空 1793

Python量化交易入门:天勤量化TqSdk保姆级教程(含避坑指南)

本文提供Python量化交易入门指南,重点介绍天勤量化TqSdk的使用方法,包括环境配置、核心API实战、策略开发技巧及实盘部署。教程涵盖中国期货市场,帮助个人投资者快速掌握量化交易技术,避开常见陷阱。

weixin_29065791的博客 836

遥感卫星影像AI数据集格式规范详解、技术原理与数据生产全流程技术手册

本技术手册旨在系统性地梳理遥感卫星影像AI数据集的各类格式标准(涵盖VOC、COCO、YOLO及遥感专用DOTA格式等),深入剖析其背后的技术原理,并详细阐述数据生产的全过程,涵盖预处理、标注、质量控制及数据增强等关键环节。无论您是刚入门的算法工程师,还是资深的数据生产管理者,本手册都将为您提供详实的参考与指引。

panshengwu的博客 1134

base64编码、解码的C语言实现

  base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于26=64,所以每6位为一个单位,对应某个可打印字符。三个字节共24位,对应于4个base64单位,即3个字节需要用4个可打印

dearbaba_8520的博客 242

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

XiaoqiangClub的博客 1万+

c语言base 64编码,base64编码、解码的C语言实现

/*** base64编码、解码实现* C语言源代码** 注意:请使用gcc编译** 叶剑飞**** 使用说明:* 命令行参数说明:若有“-d”参数,则为base64解码,否则为base64编码。* 若有“-o”参数,后接文件名,则输出到标准输出文件。* 输入来自标准输入stdin,输出为标准...

weixin_31577315的博客 1065

【Claude】Invalid API key 无效密钥报错已解决

API 拒绝了你提供的 key。最高频的根因是老的/被撤销的 key 藏在某处自动加载的配置文件里,而你对此不知情。→ 检查所有可能注入 key 的来源(.env.envrc、shell 配置、IDE 设置、)→ 清除无效来源 → 用/status验证。参考:Claude Code 官方《错误参考》"身份验证"章节、社区 Invalid API key 排查记录。

博客 7926

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

base64编码解码的实现(C语言)

/**************************************************************** This is a sample routine of base64 algorithm.The goal is to  illustrate principles,so some details may be ignored. Author email:zhangw

layman2003的专栏 1506

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Base64编码解码的C语言实现代码

#include<stdio.h> #include<string.h> //base64表,用于编码 static const char Base64Code[64] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b'

Darclindy的博客 769

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

c语言实现base64编码解码,C语言实现base64编码,base64解码

char*base64_encode(char*binData,char*base64,intbinLength){inti=0;intj=0;intcurrent=0;for(i=0;i//获取第一个6位current=(*(binData+i)>>2)&0x3F;*(base64+j++)=base64char[c...

weixin_33443972的博客 593

C语言实现Base64编码解码

C语言实现Base64编码解码 Encode static const char base[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; bool base64_encode(const char * p, char **outptr, int length,int* outlen) { int j = 0; int flag=0; char *output; char *base64; base64

qq_38251859的博客 2552

揭秘Base64底层原理:用C语言从零实现编码解码核心逻辑

掌握Base64编码本质,本文详解C语言实现Base64编码解码算法全过程,涵盖原理剖析、内存处理与查表优化,适用于网络传输与数据存储场景,高效可靠,值得收藏。

Instrulink的博客 1036
上一篇: 反向进程注入及隐藏--动手做一个最简单的PELoader
下一篇: POP3Dlg.cpp
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值