`
qilixiang012
  • 浏览: 201911 次
文章分类
社区版块
存档分类
最新评论

Base64编码 概念和用途

 
阅读更多

Base64概念

什么是Base64?

按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)


Base64作用

由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。

base64特别适合在http,mime协议下快速传输数据。

base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。


Base64原理

Base64编码方法要求把每三个8Bit的字节转换为四个6Bit的字节,其中,转换之后的这四个字节中每6个有效bit为是有效数据,空余的那两个 bit用0补上成为一个字节。因此Base64所造成数据冗余不是很严重,Base64是当今比较流行的编码方法,因为它编起来速度快而且简单

 举个例子,有三个字节的原始数据:aaaaaabb bbbbccccc ccdddddd(这里每个字母表示一个bit位)
  那么编码之后会变成:      00aaaaaa 00bbbbbb 00cccccc 00dddddd

所以可以看出base64编码简单,虽然编码后不是明文,看不出原文,但是解码也很简单


为什么要使用Base64?

在设计这个编码的时候,我想设计人员最主要考虑了3个问题:
1.是否加密?
2.加密算法复杂程度和效率
3.如何处理传输?

加密是肯定的,但是加密的目的不是让用户发送非常安全的Email。这种加密方式主要就是“防君子不防小人”。即达到一眼望去完全看不出内容即可。
基于这个目的加密算法的复杂程度和效率也就不能太大和太低。和上一个理由类似,MIME协议等用于发送Email的协议解决的是如何收发Email,而并不是如何安全的收发Email。因此算法的复杂程度要小,效率要高,否则因为发送Email而大量占用资源,路就有点走歪了。

但是,如果是基于以上两点,那么我们使用最简单的恺撒法即可,为什么Base64看起来要比恺撒法复杂呢?这是因为在Email的传送过程中,由于历史原因,Email只被允许传送ASCII字符,即一个8位字节的低7位。因此,如果您发送了一封带有非ASCII字符(即字节的最高位是1)的Email通过有“历史问题”的网关时就可能会出现问题。网关可能会把最高位置为0!很明显,问题就这样产生了!因此,为了能够正常的传送Email,这个问题就必须考虑!所以,单单靠改变字母的位置的恺撒之类的方案也就不行了。关于这一点可以参考RFC2046。
基于以上的一些主要原因产生了Base64编码。


算法实现

分享到:
评论

相关推荐

    Java Base64编码方法详解及实例分析

    在本文中,我们介绍了Base64.encodeBase64String方法的用途和功能,它是Java语言中用于Base64编码的一个重要工具。我们提供了一个完整的Java示例代码,演示了如何使用该方法对二进制数据进行Base64编码。通过本文的...

    基础密码学与杂项

    课程目标 •掌握密码学的基本概念 •掌握常见的加解密算法的原理 •掌握隐写术的概念与相对应的解密方法 ...•Base64编码 •URL编码 •Unicode编码 •常见的JS的加解密 •JS混淆 •JSfuck •Jother

    数据库课程设计--图书管理系统.doc

    2、完成系统概念结构设计 概念数据模型(CDM)用于完成数据库的设计,与人和数据库平台和具体数据存储结构和 工具无关。首先选择局部应用画出分E-R图,最终形成系统的E-R图 3、完成系统逻辑结构设计 按照E- R图转换...

    千兆以太网技术与应用

    理和目标应用 107 第11章 千兆以太网集线器 109 11.1 中继器 109 11.1.1 中继器操作 110 11.1.2 中继器管理 112 11.1.3 千兆以太网支持的中继器配置 113 11.1.4 共享千兆以太网的性能 114 11.1.5 中继器的优缺点 ...

    WAP 无线应用协议

    1.4.7 其他的服务和应用 8 1.4.8 WAP协议典型的搭配 9 1.5 一致性与互通性 9 1.6 未来的工作内容 10 1.7 术语定义 10 1.8 缩略语 11 1.9 参考标准 12 1.10 参考资料 13 第二部分 应用层 第2章 无线应用环境概述 15 ...

    Access模拟试题

    计算机对数据的管理是指如何对数据分类、组织、编码、存储、检索和维护。 人工管理 文件系统 数据库系统 分布式数据库系统 面向对象数据库系统 2、数据库系统 (1)有关数据库的概念 ①数据(Data) ②数据库...

    计算机概论-平时作业.docx

    答:计算机常用编码如下: 1>Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一 2>ASCll字符集:美国信息互换标准代码,是基于罗马字母表的一套电脑编码系统,主要显示英语和一些西欧语言,是现今最通用 的...

    网络基础教程

    <br>Ch6.(1次课) 6.1 概述 6.2 UNIX 6.3(自学) 6.4 网管的概念和实现方法,网管代理Agent、MIB的概念 <br>Ch7.(0.5次课) 7.1 网络应用模式(C/S、B/S) 7.2(略) <br>Ch8.(0.5...

    AlgoVisualizer:React Base算法可视化

    演算法气泡排序快速排序单链表DFS 迪克斯特拉先决条件基本编码知识有关数据结构和算法的一些概念数学系项目初始化克隆项目将目录更改为AlgoVisualizer cd AlgoVisualizer 打开终端并写 npm i // or yarn add 运行...

    计算机应用技术(实用手册)

    计算机应用技术 实用手册 Xnllz 2011.7.29 目录 第一章COMS的设置 1 1.STANDARD CMOS SETUP(标准CMOS设定)用来设定日期、时间、软硬盘规格、工作类类型。 3 2.BIOS能功设定 5 3.Advanced ...

    transformers-for-lawyers:AI应用法律技术基准

    判决中的所有句子均已通过BERT模型( 提供的bert-base-uncased )进行编码,这是一个非常强大的NLP模型的例子,已经征服了AI应用程序。 搜索体验的基础架构基于 - 一个基于最新的深度学习策略设计神经搜索引擎的...

    ExtJSWeb应用程序开发指南(第2版)

    6.9 Ext.util.JSON编码和解码Json对象 6.9.1 decode() 6.9.2 encode() 6.10 Ext.util.MixedCollection 6.10.1 向集合加入对象 6.10.2 将数组中的对象加入到集合中 6.10.3 移除集合中的对象 6.10.4 克隆...

    超级有影响力霸气的Java面试题大全文档

    面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化...

    C# winform典型系统开发模板

     8.2.1 Base64编码格式 180  8.2.2 SMTP服务 181  8.2.3 POP3协议 184  8.2.4 使用Jmail组件接收邮件 186  8.2.5 邮件发送类的使用 188  8.2.6 使用正则表达式验证邮件格式 190  8.3 设计...

    Reverse-Mode-Automatic-Differentiation-Cpp:无需使用任何库即可在C ++中实现逆向模式自动区分的简单实现

    基本算术的许多概念都使用链尺和基本函数的派生来应用。 该项目的目的是帮助我理解反向模式AD的工作原理,并可能帮助其他人也理解这些概念。 这个“库”不是用任何精美的外部库或其他任何东西编写的。 它是简单明了...

    java面试题

    39. 解释$ORACLE_HOME 和$ORACLE_BASE的区别? 19 40. session与cookie的区别和联系? 19 41. Statement和PrepareStatement的区别 19 42. JSP的内置对象及方法。 19 43. JSP的常用指令 20 44. 四种会话跟踪技术 20 45...

    asp.net知识库

    常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN...

    Shrubbery:基于VIPER和Clean Architecture的基础iOS应用程序项目

    灌木这是iOS + Swift应用程序的展示柜,其概念与相同。 我们希望可以提供完整的iOS基本架构。 一旦我们需要构建应用程序,开发人员就可以专注于业务流程/逻辑,而不必一次又一次地从0开始创建。建筑学该项目混合了两...

    基于python+Flask+Paddle-ERNIE实现的的自动派单系统源码+项目说明.zip

    在这个任务中,没有层级分类的概念,即各标签之间没有从属关系。 Fasttext的思想是:将工单文本切分成单个字的序列,例如:【我爱中国】切分成[我,爱,中,国]。模型训练一个词嵌入层,对输入的文本,切分成**字...

Global site tag (gtag.js) - Google Analytics