网络传输——Base64详解
base64解析

base64解析
base64编码是一种用64个字符来表示任意二进制数据的方法。
它是一种简单
的文本编码方式,可以将任何类型的文本或二进制数据编码为文本文件,例如电子邮件附件,图像文件或其他二进制数据文件。
Base64编码的性质非常强,使用
base64编码可以将任何字符、数字和控制字符统一转换为64个字符组成的字符串,比其他任何字符串编码都要有效得多,以节省空间,保护数据完整性,防止数据泄漏。
Base64编码的优点很多,首先,它有效地解决了字符编码的繁琐问题,编码
规则简洁易懂,能够有效缩短图片信息在文件传输过程中的传输时间和存储空间。
它还支持大多数常用浏览器,并且极其方便,可以简单方便地对图片文件和文本文件进行编解码,从而能够轻松地实现图片保护,确保数据的真实性,避免图片被破解和失真。
总之,base64编码是一种强大,有效,安全的编码方式,在文件传输、信息加密和从字符串或二进制数据文件提取信息等方面都有重要作用,今后传输文件和安全传输信息将会更加容易,更安全。
Base64简单介绍

Base64简单介绍本⽂科普数据处理中常⽤的Base64相关知识,包括Base64编码⽅案的内部细节、特征及应⽤,⽂章末还提供了iOS和JavaScript 版本的Base64编码和解码⽅案。
Base64编码⽅案介绍Base64是⼀种基于64个可打印字符来表⽰⼆进制数据的表⽰⽅法,简单点说就是Base64编码⽅案可以使⽤由64个指定字符的排列组合⽅式来表⽰所有的⼆进制数据。
Base64可以⽤作电⼦邮件的传输编码,常⽤于处理(表⽰、传输和存储)⽂本数据的业务场景中,在⽹络安全数据处理⽅⾯有应⽤。
下⾯我们使⽤电脑中的命令⾏⼯具先简单感受下Base64的编码⽅式(我⾃⼰使⽤的Mac OSX系统的终端,如果是windows操作系统可以下载)。
①编码⽂件wendingding:Demo wendingding$ base64 123.png -o 123.textwendingding:Demo wendingding$ cat 123.textiVBORw0KGgoAAAANSUhEUgAAABIAAAAOCAYAAAAi2ky3AAAEGWlDQ1BrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQgAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lpurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZPC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q44WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23BaIXzbcOnz5mfPoTvYVz7KzUl5+FRxEuqkp9G/Ajia219thzg25abkRE/BpDc3pqvphHvRFys2weqvp+krbWKIX7nhDbzLOItiM8358pTwdirqpPFnMF2xLc1WvLyOwTAibpbmvHHcvttU57y5+XqNZrLe3lE/Pq8eUj2fXKfOe3pfOjzhJYtB/yll5SDFcSDiH+hRkH25+L+sdxKEAMZahrlSX8ukqMOWy/jXW2m6M9LDBc31B9LFuv6gVKg/0Szi3KAr1kGq1GMjU/aLbnq6/lRxc4XfJ98hTargX++DbMJBSiYMIe9Ck1YAxFkKEAG3xbYaKmDDgYyFK0UGYpfoWYXG+fAPPI6tJnNwb7ClP7IyF+D+bjOtCpkhz6CFrIa/I6sFtNl8auFXGMTP34sNwI/JhkgEtmDz14ySfaRcTIBInmKPE32kxyyE2Tv+thKbEVePDfW/byMM1Kmm0XdObS7oGD/MypMXFPXrCwOtoYjyyn7BV29/MZfsVzpLDdRtuIZnbpXzvlf+ev8MvYr/Gqk4H/kV/G3csdazLuyTMPsbFhzd1UabQbjFvDRmcWJxR3zcfHkVw9GfpbJmeev9F08WW8uDkaslwX6avlWGU6NRKz0g/SHtCy9J30o/ca9zX3Kfc19zn3BXQKRO8ud477hLnAfc1/G9mrzGlrfexZ5GLdn6ZZrrEohI2wVHhZywjbhUWEy8icMCGNCUdiBlq3r+xafL549HQ5jH+an+1y+LlYBifuxAvRN/lVVVOlwlCkdVm9NOL5BE4wkQ2SMlDZU97hX86EilU/lUmkQUztTE6mx1EEPh7OmdqBtAvv8HdWpbrJS6tJj3n0CWdM6busNzRV3S9KTYhqvNiqWmuroiKgYhshMjmhTh9ptWhsF7970j/SbMrsPE1suR5z7DMC+P/Hs+y7ijrQAlhyAgccjbhjPygfeBTjzhNqy28EdkUh8C+DU9+z2v/oyeH791OncxHOs5y2AtTc7nb/f73TWPkD/qwBnjX8BoJ98VQNcC+8AAAAkSURBVCgVY2RkZPzPQAXARAUzwEaMGkQ4JEfDaDSMCIcAYRUAPhgBHp0GsDQAAAAASUVORK5CYII=wendingding:Demo wendingding$ base64 123.text -D -o new.pngwendingding:Demo wendingding$ tree -L 2.├── 123.png├── 123.text└── new.pngwendingding:Demo wendingding$ md5 123.pngMD5 (123.png) = 314e5198b3d2da9fbfb0d85c398bcbe2wendingding:Demo wendingding$ md5 new.pngMD5 (new.png) = 314e5198b3d2da9fbfb0d85c398bcbe2在上⾯的演⽰中我们⾸先对Demo⽂件⽬录下的123.png⽂件(图⽚)进⾏base64编码,把结果保存到123.text⽂件后⼜对123.text⽂件进⾏base64解码操作,并最终匹配解码后得到的⽂件和源⽂件。
base64原理解密

base64原理解密什么是 base64我们知道⼀个字节可以表⽰的范围是 0 ~ 255,并且在 ASCII 码表中会对应⼀个字符,⽐如:字符 97 对应字符 'a'、90 对应字符 'Z' 等等。
⽽在 ASCII 码表中有很多字符都是不可见字符,那么当数据在⽹络上传输时,由于不同的设备对字符的处理会有⼀些不同,那些不可见字符就有可能被错误处理。
所以这是不利于数据传输的,⽽解决办法就是先将数据进⾏⼀个base64 编码,将其统统变成可见字符,这样出错的概率就⼤⼤降低了。
base64 应⽤在很多领域当中,⽐如:根证书、电⼦邮件、图⽚传输等等,那么下⾯就来分析⼀下 base64 到底是如何对数据进⾏编码的。
这⾥需要提⼀嘴,很多⼈会把编码(encode)和加密(encrypt)搞混,尽管它们都是将数据变成另⼀种格式,但是两者还是不⼀样的。
⾸先编码是为了⽅便数据传输,不是为了保证数据的机密性,⽐如这⾥的 base64,它的编码规则是公开的,只要你的数据是 base64 编码之后的,那么任何⼈都可以进⾏解码;⽽加密才是为了数据不被别⼈知道,所采取的安全策略。
base64 原理解密我们说由于存在不可见的字符的问题,所以需要将每⼀个 ASCII 码都映射成可见字符。
那么同 ASCII 码表⼀样,base64 肯定也有⼀张相应的表,记录了数字和字符之间的映射关系。
+----+---+----+---+----+---+----+---+| 0 | A | 16 | Q | 32 | g | 48 | w || 1 | B | 17 | R | 33 | h | 49 | x || 2 | C | 18 | S | 34 | i | 50 | y || 3 | D | 19 | T | 35 | j | 51 | z || 4 | E | 20 | U | 36 | k | 52 | 0 || 5 | F | 21 | V | 37 | i | 53 | 1 || 6 | G | 22 | W | 38 | m | 54 | 2 || 7 | H | 23 | X | 39 | n | 55 | 3 || 8 | I | 24 | Y | 40 | o | 56 | 4 || 9 | J | 25 | Z | 41 | p | 57 | 5 || 10 | K | 26 | a | 42 | q | 58 | 6 || 11 | L | 27 | b | 43 | r | 59 | 7 || 12 | M | 28 | c | 44 | s | 60 | 8 || 13 | N | 29 | d | 45 | t | 61 | 9 || 14 | O | 30 | e | 46 | u | 62 | + || 15 | P | 31 | f | 47 | v | 63 | / |+----+---+----+---+----+---+----+---+我们看到总共由 26 个⼤写英⽂字符、26 个⼩写英⽂字符、10 个阿拉伯数字、1 个加号、1 个斜杠,总共 64 个字符组成,所以是 base64。
Base64算法

Base64算法简介Base64是⽹络上最常见的⽤于传输8Bit字节码的可读性编码算法之⼀。
所谓Base64,即是说在编码过程中使⽤了64种字符:⼤写A到Z、⼩写a到z、数字0到9、“+”和“/”。
可读性编码算法不是为了保护数据的安全性,⽽是为了可读性。
可读性编码不改变信息内容,只改变信息内容的表现形式。
Base58是Bitcoin(⽐特币)中使⽤的⼀种编码⽅式,主要⽤于产⽣Bitcoin的钱包地址,相⽐Base64,Base58不使⽤数字"0",字母⼤写"O",字母⼤写"I",和字母⼩写"i",以及"+"和"/"符号。
原理base64 是3个字节为⼀组,⼀个字节 8位,⼀共就是24位,然后,把3个字节转成4组,每组6位,3 * 8 = 4 * 6 = 24,每组6位,缺少的2位,会在⾼位进⾏补0 ,这样做的好处在于,base取的是后⾯6位,去掉⾼2位,那么base64的取值就可以控制在0-63位了,所以就叫base64,111111 = 32 + 16 + 8 + 4 + 2 + 1 = 63,再加上全0的,总共64。
映射表⽰例"abc"和"中"都为3个字节,共24位,24 / 6 = 4,因此进⾏Base64编码后,输出4个字符。
分析:abc在ASCII表对应的字节数组是97,98,99,⼆进制数为01100001,01100010,01100011,按照规则6个⼀组划分后为011000,010110,001001,100011,⾼位补0后为00011000,00010110,00001001,00100011,对应的byte数为24,22,9,35,映射表查找,对应字符为YWJjSystem.out.println(Base64.encode("abc".getBytes()));//YWJjSystem.out.println(Base64.encode("中".getBytes()));//5Lit⼤家可能发现⼀个问题,咱们的base64有时候会有个 = 号,但是在映射表⾥⾯没有发现 = 号,这个地⽅需要注意,等号⾮常特殊,因为base64是三个字节⼀组,如果当我们的位数不够的时候,会使⽤等号来补齐。
Base64算法原理,以及编码、解码【加密、解密】介绍

Base64算法原理,以及编码、解码【加密、解密】介绍Base64编码,是我们程序开发中经常使⽤到的编码⽅法。
它是⼀种基于⽤64个可打印字符来表⽰⼆进制数据的表⽰⽅法。
它通常⽤作存储、传输⼀些⼆进制数据编码⽅法!也是MIME(多⽤途互联⽹邮件扩展,主要⽤作电⼦邮件标准)中⼀种可打印字符表⽰⼆进制数据的常见编码⽅法!它其实只是定义⽤可打印字符传输内容⼀种⽅法,并不会产⽣新的字符集!有时候,我们学习转换的思路后,我们其实也可以结合⾃⼰的实际需要,构造⼀些⾃⼰接⼝定义编码⽅式。
好了,我们⼀起看看,它的转换思路吧!Base64实现转换原理它是⽤64个可打印字符表⽰⼆进制所有数据⽅法。
由于2的6次⽅等于64,所以可以⽤每6个位元为⼀个单元,对应某个可打印字符。
我们知道三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要⽤4个Base64的可打印字符来表⽰。
在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中⼀般有所不同。
但是,我们经常所说的Base64另外2个字符是:“+/”。
这64个字符,所对应表如下。
转换的时候,将三个byte的数据,先后放⼊⼀个24bit的缓冲区中,先来的byte占⾼位。
数据不⾜3byte的话,于缓冲区中剩下的bit⽤0补⾜。
然后,每次取出6个bit,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出。
不断进⾏,直到全部输⼊数据转换完成。
如果最后剩下两个输⼊数据,在编码结果后加1个“=”;如果最后剩下⼀个输⼊数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。
编码后的数据⽐原始数据略长,为原来的4/3。
⽆论什么样的字符都会全部被编码,因此不像编码,还保留部分可打印字符。
base64加密原理

base64加密原理Base64加密原理。
Base64是一种用64个字符来表示任意二进制数据的方法,它由美国国家标准局制定的一种基于64个可打印字符来表示二进制数据的方法。
在计算机网络中,经常使用Base64编码来传输非文本数据。
那么,Base64加密的原理是什么呢?首先,我们需要了解Base64编码的字符集。
Base64编码使用了A-Z、a-z、0-9这62个字符,再加上"+"和"/"两个符号,一共64个字符。
这些字符是根据ASCII码表来的,分别对应着0到63这64个数字。
其次,Base64加密的原理是将输入的数据按照3个字节一组进行分割,每组3个字节共24个比特,然后再将这24个比特分成4组,每组6个比特。
接着,将这4组6个比特的数字作为索引,查表得到对应的Base64编码字符。
在进行Base64加密时,如果输入的数据不足3个字节,会进行补位操作。
具体来说,如果输入的数据不足3个字节,会在末尾补上1个或2个“=”号,以此来表示补位的情况。
Base64加密的原理可以用如下的伪代码来表示:1. 将输入数据按照3个字节一组进行分割。
2. 将每组3个字节的数据转换为4组6个比特的数字。
3. 将这4组6个比特的数字作为索引,查表得到对应的Base64编码字符。
4. 如果输入的数据不足3个字节,进行补位操作,末尾补上1个或2个“=”号。
通过上述原理,我们可以看到Base64加密是一种简单而有效的数据加密方式。
它能够将任意的二进制数据转换为可打印字符,方便在各种场景下进行传输和存储。
同时,Base64编码也是一种常见的数据传输方式,例如在电子邮件、HTTP协议、图片传输等领域都有广泛的应用。
然而,需要注意的是,Base64编码并不是一种加密算法,它只是一种编码方式。
因为Base64编码的原理是将二进制数据转换为可打印字符,而并没有进行加密操作,所以并不具备加密算法的安全性。
base64简介
base64简介Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码可用于在HTTP环境下传递较长的标识信息。
例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。
在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。
此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
然而,标准的Base64并不适合直接放在URL里传输,因为URL 编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“*”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。
此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
编码解码Base64
Base64算法:主要用于邮件,加密后的密文只包括大小写字母,10个数字和+ / = ,共计65个,其中==只作为占位符,在密文最后出现,所以只有64个字符,而1byete=8bit,1byte能表示256,而为了只能表示64,所以只取1byte只取6bit,然后在前面补2bit的0,即可。
这样如果原来三个字节的明文,编码后,变成4byte密文,也就是变长了1/3.如果明文字符数不是3的整数倍,则最后肯定还剩有字符,则后面也要补足0,结果生成了==例如A:0x41 二进制0100 0001 前6位010000 补高位两个0为0001 0000 即十进制的16对应Q。
剩下的二位01,所以后面需要补足2byte,这样才能有18位,可以被6整除。
01 0000 0000 0000 0000进行编码:0001 0000 编码为Q,后面为两个占位符,用==填充。
例子:Jav编码后为SmF2J:0x4A 二进制表示:0100 1010a:ox61 0110 0001v:0x76 0111 0110010010 补位为0001 0010 为十进制18 S100110 补位为0010 0110 为十进制38 m000101 补位为0000 0101 为十进制 5 F110110 补位为0011 0110 为十进制54 2经过查表后为SmF2Base64的字符映射表数值(十进制)编码数值编码数值编码1B18S35j5202C19T36k5313D20U37l5424E21V38m5535F22W39n5646G23X40o5757H24Y41p5868I25Z42q5979J26a43r60810K27b44s61911L28c45t62+12M29d46u63/13N30e47v占位=14O31f48w15P32g49xURL Base64,因为主要是替换62 和63字符,将+和/变成了-和_,而对于占位符,Bouncy Castle 将之用.代替,而Commons Codes杜绝任何的补位符。
base64编码格式
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
可查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。
采用Base64编码具有不可读性,需要解码后才能阅读。
Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。
为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。
【转】什么是Base64?
【转】什么是Base64?⼀:什么是Base64?百度百科中对Base64有⼀个很好的解释:“Base64是⽹络上最常见的⽤于传输8Bit字节码的编码⽅式之⼀,Base64就是⼀种基于64个可打印字符来表⽰⼆进制数据的⽅法”。
什么是“可打印字符”呢?为什么要⽤它来传输8Bit字节码呢?在回答这两个问题之前我们有必要来思考⼀下什么情况下需要使⽤到Base64?Base64⼀般⽤于在HTTP协议下传输⼆进制数据,由于HTTP协议是⽂本协议,所以在HTTP协议下传输⼆进制数据需要将⼆进制数据转换为字符数据。
然⽽直接转换是不⾏的。
因为⽹络传输只能传输可打印字符。
什么是可打印字符?在ASCII码中规定,0~31、128这33个字符属于控制字符,32~127这95个字符属于可打印字符,也就是说⽹络传输只能传输这95个字符,不在这个范围内的字符⽆法传输。
那么该怎么才能传输其他字符呢?其中⼀种⽅式就是使⽤Base64。
Base64,就是使⽤64个可打印字符来表⽰⼆进制数据的⽅法。
⼆: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;base64转成图⽚//图⽚转为base64编码的字符串public static string ImgToBase64String(string Imagefilename){try{Bitmap bmp = new Bitmap(Imagefilename);MemoryStream ms = new MemoryStream();bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);byte[] arr = new byte[ms.Length];ms.Position = 0;ms.Read(arr, 0, (int)ms.Length);ms.Close();return Convert.ToBase64String(arr);}catch (Exception ex){return null;}}///<summary>/// base64编码的字符串转为图⽚///</summary>///<param name="filefullname">图⽚的完整路径 png⽂件</param>///<param name="strbase64">base64格式的图⽚</param>///<returns></returns>public static bool Base64StringToImage(string filefullname, string strbase64){if (strbase64.IsEmpty())return false;byte[] arr = Convert.FromBase64String(strbase64);if (arr == null || arr.Length <= 0)return false;MemoryStream ms = new MemoryStream(arr);if (ms == null || ms.Length <= 0)return false;Bitmap bmp = new Bitmap(ms);try{bmp.Save(filefullname, System.Drawing.Imaging.ImageFormat.Png);return true;}catch (Exception ex){LogHelper.LogWrite(ex);return false;}finally {ms?.Close();bmp?.Dispose();}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Base64编码转换表如下:
十进制
编码
十进制
编码
十进制
编码
十进制
编码
0
A
16
Q
32
g
48
w
1
B
17
R
33
h
49
x
2
C
18
S
34
i
50
y
3
D
19
T
35
j
51
z
4
E
20
U
36
k
52
0
5
F
21
V
37
l
53
1
6
G
22
W
38
m
54
2
7
H
23
X
39
n
55
3
8
I
24
Y
while(i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt((c1 & 0x3) << 4);
9
09
HT (horizontal tab)
水平制表符
0000 1010
10
0A
LF (NL line feed, new line)
换行键
0000 1011
11
0B
VT (vertical tab)
垂直制表符
0000 1100
12
0C
FF (NP form feed, new page)
换页键
0000 1101
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var base64DecodeChars = new Array(
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Content-Transfer-Encoding:base64(Gb2312)
这种传输格式又被称为U-t-U(Unix to Unix)传输协议,能兼容大多数的硬件设备并基于其上进行无损字节传输。但是缺点在于是,使用此种格式会使文件的大小增加百分之四十左右。
除了作为MIME的默认编码标准,base64编码也广泛用于其他领域。一个常见的例子是用于网络服务器完成基于HTTP的基本认证。当服务器想限制访问某些文件时,通过使用基于HTTP的基本认证系统,便可以对这些文件进行密码保护。而基本认证使用Base64编码标准对用户名和密码进行编码。这样,黑客们使用TCP通过端口连接ESMTP服务器时,手动输入量就会大大增加。
out += "==";
break;
}
c2 = str.charCodeAt(i++);
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
/* c4 */
do {
c4 = str.charCodeAt(i++) & 0xff;
if(c4 == 61)
return out;
c4 = base64DecodeChars[c4];
} while(i < len && c4 == -1);
if(c4 == -1)
break;
out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
/* c3 */
do {
c3 = str.charCodeAt(i++) & 0xff;
if(c3 == 61)
return out;
c3 = base64DecodeChars[c3];
} while(i < len && c3 == -1);
if(c3 == -1)
break;
out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
2、通过任何一种方式(手算、机器算、对照表格)将这部分十进制编码转换成二进制(文章最后附有转换表)编码。每个十进制码都对应器等价的八位二进制数值。
3、将这部分二进制数连结到一起,产生一串二进制数。
4、将这一大片的二进制字符串分割成每6个字符为一部分的小块。
5、通过任何一种方式(手算、机器算、对照表格)将这部分6字符的小块分别转换成相应的等价十进制数。
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
if(c1 == -1)
break;
/* c2 */
do {
c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
} while(i < len && c2 == -1);
if(c2 == -1)
break;
out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
40
o
56
4
9
J
25
Z
41
p
57
5
10
K
26
a
42
q
58
6
11
L
27
b
43
r
59
7
12
M
28
c
44
s
60
8
13
N
29
d
45
t
61
9
14
O
30
e
46
u
62
+
15
P
31
f
47
v
63
/
例如:mne,通过ASCII字符表转化为是进制值为:m、109,n,110,e、101.合起来就是:109110101.转化为二进制就是:0110 1101 0110 1110 0110 0101。将它们分成六个字为一段:011011 010110 111001 100101。而他们对应的十进制字符分别是:27 22 57 37。Base64等价值就是:27、b,22、w,57、5,37、1,也就是说mne的Base64编码是bw51。
4
04
EOT (end of transmission)
传输结束
0000 0101
5
05
ENQ (enquiry)
请求
0000 0110
6
06
ACK (acknowledge)
收到通知
0000 0111
7
07
BEL (bell)
响铃
0000 1000
8
08
BS (backspace)
退格
0000 1001
记录分离符
0001 1111
31
1F
US (unit separator)
单元分隔符
附2:下列Perl脚本将会自动帮你做解密:
Use MIME::Base64;
Print decode_base64(“Insert Text here”);
附3:使用Java脚本实现解密(代码):
<script type="text/javascript">
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
function base64Encode(str) {
var out, i, len;
var c1, c2, c3;
len = str.length;
i = 0;
out = "";
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
网络传输——Base64详解
自从引用以来,Base64编码的标准极普及为的迅速。不过,把文件作为附件通过网际邮件扩充协议(MIME)传送时,Base64是标准的编码标准。然而,几乎所有的电子邮件客户端都是用MIME发送文件(以附件形式)的,这就意味着大多数的电子邮件客户端使用Base64对文件编码后通过网络传输。格式如下: