C语言中关于Base64编码的基础原理

news/2024/10/5 7:29:11

Base64编码简述:

1.Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
2.Base64,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"一共64个字符的字符集,(任何符号都可以转换成这个字符集中的字符,这个转换过程就叫做base64编码。
3.Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

编码原理

关于这个编码的规则:
1.把3个字节变成4个字节。
2.每76个字符加一个换行符。
3.最后的结束符也要处理。

以下示例

转换前 11111111, 11111111, 11111111 (二进制)
转换后 00111111, 00111111, 00111111, 00111111 (二进制)

#include <string.h>
#include <stdio.h>int main()
{// 设定编码前原数据为3个8bit的字节// data1 : 1111 1111// data2 : 1111 1111// data3 : 1111 1111// 编码后应转换为4个6bit的字节  采用高位补零  0011 1111  0011 1111 0011 1111 0011 1111(二进制)char data1 = 0xff, data2 = 0xff, data3 = 0xff;// 按照顺序对三个数据进行位运算操作// 第一个字节获得 0011 1111  data1 被分为1111 11 11char temp1 = data1 & 0x3f;// 第二个字节获得 0011 1111  包含data1的低2位1111 1111&0000 0011--> 0000 0011 -->0011 0000 和data2的高4位//  1111 1111 & (0000 1111-->1111 0000)-->1111 0000  -->0000 1111 &0011 0000char temp2 = ((data1 & 0x3) << 4) | ((data2 & (0xf << 4)) >> 4);// 第三个字节获得0011 1111 包含data2的低4位1111 1111&0000 1111-->0000 1111 <<2 -->0011 1100// data3的高2位 1111 1111 &(0000 0011<<6)-->1100 0000 >>4-->0000 0011// 位或后得到0011 1111char temp3 = ((data2 & 0xf) << 2) | ((data3 & (0x3 << 6)) >> 6);// 第四个字节获得0011 1111 包含data3的低6位 1111 1111&0011 1111char temp4 = data3 & 0x3f;// 打印验证结果printf("%#x,%#x,%#x,%#x\n", temp1, temp2, temp3, temp4);
}

注:以上代码为单个3字节转4字节,如数据量较大时,可使用循环进行批量操作
当处理到指定字节数时可对已处理字节数求余的方法进行特殊处理

以下为测试结果

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/44207.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

09-盒子模型

盒子模型01 认识盒子模型02 盒子模型的四边03 盒子边框04 盒子内边距-padding 通常用于设置边框和内容之间的间距 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible&quo…

试了下ocr

pdf能看了,拓展的驱动下,想着是否可以ORC呢,识别到文字内容更有帮助。 按网搜的顺序,开始是用pytesseract,pip安装顺利,但运行不了,提示找不到pytesseract,按网上的帮助下载win安装包,选上中文包,再试,可以运行了,就是中文基本识别不了,也不知哪里改善,只得作罢。…

fastjson1

@目录前言分析复制文件清空文件出现问题和分析问题解决分析问题再次出现问题再次分析最终结果读取文件分析poc拓宽场景极限环境poc优化修改再次优化poc的分析写入文件SafeFileOutputStream写文件java8无依赖读文件在commons-io库下的写入文件原因利用链分析组合poc出现问题和分…

解决运行loadRunner报错无法进行代理的错误

选择第二个,不设置代理,可以实现回放不会报错,但是今日运行遇到错误,无法实现全部的录制脚本回访完毕,卡住打开网址处的脚本。直接运行完毕,不会报错。

LiteDb

目录封装的代码相关参考本文记录LiteDb的使用,建议初学者使用时先根据官方的文档进行学习。LiteDb官网LiteDb DocLiteDb Package LiteDb API 封装的代码LiteDbWrapper.cs/// <summary>/// 官网:http://www.litedb.org//// GitHub:https://github.com/mbdavid?tab=repo…

winform窗体关闭之前弹出确认框

需要使用到窗体的 FormClosing 事件 private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) {DialogResult dialogResult = MessageBox.Show("是否确认关闭窗口", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);if (…

Oh My Posh 安装与使用

Oh My Posh 安装与使用 目录Oh My Posh 安装与使用IntroductionInstallationThemes配置使用主题安装字体建议FAQ本文介绍 Windows Terminal. 集成 Oh My Posh . Introduction Oh My Posh 介绍。 Introduction | Oh My PoshInstallation Windows Terminal 安装 Oh My Posh. Wind…

Canny边缘检测算法

一、概念 Canny算法是一种经典的图像处理算法,用于图像中的边缘检测,其实现的步骤包括:高斯滤波; 计算梯度和方向:对平滑后的图像使用Sobel算子计算水平方向和竖直方向的一阶导数,然后计算该点的梯度大小和方向;非极大值抑制:对梯度图上的每个像素,根据其梯度方向,确…