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编码过后原文也变成不能看到的字符格式,可是这样的方式非常0基础,非常easy。

Base64原理

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



 举个样例,有三个字节的原始数据:aaaaaabb bbbbccccc ccdddddd(这里每一个字母表示一个bit位)

  那么编码之后会变成:      00aaaaaa 00bbbbbb 00cccccc 00dddddd



所以能够看出base64编码简单,尽管编码后不是明文,看不出原文。可是解码也非常easy

为什么要使用Base64?

在设计这个编码的时候,我想设计人员最主要考虑了3个问题:

1.是否加密?

2.加密算法复杂程度和效率

3.怎样处理传输?

加密是肯定的。可是加密的目的不是让用户发送很安全的Email。这样的加密方式主要就是“防君子不防小人”。即达到一眼望去全然看不出内容就可以。

基于这个目的加密算法的复杂程度和效率也就不能太大和太低。和上一个理由类似,MIME协议等用于发送Email的协议解决的是怎样收发Email,而并非怎样安全的收发Email。因此算法的复杂程度要小。效率要高。否则由于发送Email而大量占用资源。路就有点走歪了。

可是,假设是基于以上两点,那么我们使用最简单的恺撒法就可以。为什么Base64看起来要比恺撒法复杂呢?这是由于在Email的传送过程中。由于历史原因,Email仅仅被同意传送ASCII字符,即一个8位字节的低7位。因此,假设您发送了一封带有非ASCII字符(即字节的最高位是1)的Email通过有“历史问题”的网关时就可能会出现故障。

网关可能会把最高位置为0!

非常明显。问题就这样产生了!因此,为了可以正常的传送Email,这个问题就必须考虑!所以。单单靠改变字母的位置的恺撒之类的方案也就不行了。关于这一点可以參考RFC2046。

基于以上的一些主要原因产生了Base64编码。

算法实现

版权声明:本文博客原创文章。博客,未经同意,不得转载。

Base64编码 概念和用途的更多相关文章

  1. Base64编码【转】

    转http://www.cnblogs.com/luguo3000/p/3940197.html 开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际上Base64已经简单到不能 ...

  2. 001_从原理上搞定编码-- Base64编码

    开发者对 Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Base64的相关内容,花几分钟时 ...

  3. 从原理上搞定编码-- Base64编码

    BASE64是一种编码方式,通常用于把二进制数据编码为可写的字符形式的数据.这是一种可逆的编码方式.编码后的数据是一个字符串,其中包含的字符为:A-Z.a-z.0-9.+./共64个字符:26 + 2 ...

  4. 从原理上搞定编码(四)-- Base64编码

    开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Base64的相关内容,花几分钟时间就 ...

  5. 从原理上理解Base64编码

    开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Base64的相关内容,花几分钟时间 ...

  6. 【前端攻略】:玩转图片Base64编码

    引言 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的 base64 编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的 base64 编码.标题略大,不过只是希望通过一些浅显 ...

  7. Base64编码原理分析

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在了解Base64编码之前,先了解几个基本概念:位.字节. 位:"位(bit)"是计算机中最小的数据单位.每一位 ...

  8. 关于base64编码的原理和实现

    在前文 Data URI 应用场景小结 中我们提到了一个概念,叫做 base64编码,今天我们就来聊聊 base64编码,揭开它的神秘面纱. 一句话解释:Base64是一种基于64个可打印字符来表示二 ...

  9. Base64编码简介

      基本概念   Base64这个术语最初是在“MIME内容传输编码规范”中提出的.Base64不是一种加密算法,虽然编码后的字符串看起来有点加密的赶脚.它实际上是一种“二进制到文本”的编码方法,它能 ...

随机推荐

  1. JAVA 计算地球上任意两点(经纬度)距离

    /** * 计算地球上任意两点(经纬度)距离 * * @param long1 * 第一点经度 * @param lat1 * 第一点纬度 * @param long2 * 第二点经度 * @para ...

  2. .NET开发必看资料53个+经典源码77个

    目录0豆下载:http://down.51cto.com/data/426019 附件预览: 基于.net构架的留言板项目大全源码 http://down.51cto.com/zt/70 ASP.ne ...

  3. 去掉word中向下的箭头^l----->^p

    去掉word中向下的箭头 在网页上复制文章到word中,会发现有很多向下的箭头,这些 符号叫做软回车符.如何去掉这些向下的箭头呢.步骤如下: 方法/步骤 按Ctrl+H,弹出全局替换窗口,输入查找内容 ...

  4. 在html中禁用自己主动完毕

    输入框输入内容时总是显示历史输入历史记录,现禁用的方法是加入一个属性: <input type="text name="txt_xm" autocomplete=& ...

  5. 从零开始学Xamarin.Forms(二) 环境搭建、创建项目

    原文:从零开始学Xamarin.Forms(二) 环境搭建.创建项目 一.环境搭建 Windows下环境搭建:     1.下载并安装jdk.Android SDK和NDK,当然还需要 VS2013 ...

  6. hihocoder第41周 骨牌覆盖(矩阵快速幂)

    由于棋盘只有两行,所以如果第i列的骨牌竖着放,那么就转移为第1列到第i-1列骨牌有多少种摆法 如果第一行第i列骨牌横着放,那么第二行第i列也要横着放,那么就转移为了第1列到第i-2列骨牌有多少种方法 ...

  7. 元素z-index继承问题

    两同层元素.当中一个的子元素定位与还有一个重叠时,该子元素被覆盖(此时子元素的z-index继承的是其父元素的z-index,不管其z-index多少均被覆盖) <html> <he ...

  8. C++ 建设者继承

    微通道公用号CodingRush 分享编程.算法.机器人leanring.数据挖掘.推荐系统.知识大数据计算框架,欢迎扫码关注. 子类继承了哪些东西? 子类在继承父类的时候,父类的public成员变量 ...

  9. minihomepage.exe 百度视频迷你主页

    百度视频最近动作可真.延续"DHot.exe 热点资讯"之后,又在桌面上出现了Tips窗体,例如以下图: 尽管是迷你的,可还是把其他桌面图标给挡了啊! 突然出来这么个窗体.我还以为 ...

  10. logback与Spring、SpringMVC结合使用教程(转) logback good

    摘要:本文主要介绍了如何在spring.springMVC中使用logback 一.logback与Spirng结合使用 1.maven添加引用: <dependency> <gro ...