`
shukuiyan
  • 浏览: 413810 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

base64编解码

阅读更多

      在某些系统中,只允许使用英文的ASCⅡ码字符。如果要在只允许处理英文ASCⅡ码字符的系统中出现了非ASCⅡ码字符,必须先采用某种编码方式将它们转换成ASCⅡ码字符后再进行处理。BASE64就是将二进制数据转换成可打印的ASCⅡ码字符的一种常见的编码方式。

      base64编解码原理很简单:将数据编码成BASE64编码时,以3字节数据为一组,转换为24bit的二进制数,将24bit的二进制数分成四组,每组6bit。对于每一组,得到一个数字:0-63。然后根据这个数字查表即得到结果。表如下:   0 A 17 R 34 i 51 z   

1 B 18 S 35 j 52 0   

2 C 19 T 36 k 53 1   

3 D 20 U 37 l 54 2   

4 E 21 V 38 m 55 3   

5 F 22 W 39 n 56 4   

6 G 23 X 40 o 57 5   

7 H 24 Y 41 p 58 6   

8 I 25 Z 42 q 59 7   

9 J 26 a 43 r 60 8   

10 K 27 b 44 s 61 9   

11 L 28 c 45 t 62 +   

12 M 29 d 46 u 63 /   

13 N 30 e 47 v   

14 O 31 f 48 w (pad) =   

15 P 32 g 49 x

16 Q 33 h 50 y

比如有数据:0x30 0x82 0x02   编码过程如下:  

1)得到16进制数据: 30 82 02   

2)得到二进制数据: 00110000 10000010 00000010   

3)每6bit分组: 001100 001000 001000 000010   

4)得到数字: 12 8 8 2 5)根据查表得到结果 : M I I C

      BASE64填充:在不够的情况下在右边加0。  有三种情况:  

1) 输入数据比特数是24的整数倍(输入字节为3字节整数倍),则无填充;  

2) 输入数据最后编码的是1个字节(输入数据字节数除3余1),即8比特,则需要填充2个"==",因为要补齐6比特,需加    2个00;  

3)输入数据最后编码是2个字节(输入数据字节数除3余2),则需要填充1个"=",因为补齐6比特,需要加一个00。  

举例如下:  对0x30编码:  

1) 0x30的二进制为:00110000   

2) 分组为:001100 00   

3) 填充2个00:001100 000000   

4) 得到数字:12 0   

5) 查表得到的编码为MA,另外加上两个==   所以最终编码为:MA==   

      base64解码是其编码过程的逆过程。解码时,将base64编码根据表展开,根据有几个等号去掉结尾的几个00,然后每8比特恢复即可。 SUN公司在JDK的核心包中提供两个分别用于进行BASE64编码和解码的类: Sun.misc.BASE64Encoder和Sun.misc.BASE64Decoder,BASE64Encoder用于将传入的byte[]型数据编码成String类型后返回,BASE64Decoder则用于将传入的String型数据解码成byte[]型数据返回。 需要注意的是:BASE64编码的数据时一种未加密的明文数据。

一个Base64编码的Java语言实现代码如下:

 import java.io.*; public class Base64Encode { static String BaseTable[] = { "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","c","d","e","f", "g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v", "w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/" };

public static void encode(String filename, BufferedWriter out) {

 try { File f = new File(filename);

FileInputStream fin = new FileInputStream(filename); // 读文件到BYTE数组

byte bytes[] = new byte[(int)(f.length())];

int n = fin.read(bytes);

if (n > 2); buf[1] = (byte)(((bytes[i] & 0x03) > 4)); buf[2] = (byte)(((bytes[i+1] & 0x0F) > 6)); buf[3] = (byte)( bytes[i+2] & 0x3F); send(out, BaseTable[buf[0]]); send(out, BaseTable[buf[1]]); send(out, BaseTable[buf[2]]); send(out, BaseTable[buf[3]]); /* 以上代码可以优化,但会难以理解 buf[0]= (byte)(b[i] >> 2); buf[1]= (byte)(((b[i] & 0x03) > 4)); buf[2]= (byte)(((b[i+1] & 0x0F)> 6)); buf[3]= (byte)(b[i+2] & 0x3F); send(out,BaseTable[buf[0]]+BaseTable[buf[1]]+ BaseTable[buf[2]]+BaseTable[buf[3]]); */ if ((linelength += 4) >= 76) { send(out, " "); linelength = 0; } i += 3; } // 处理尾部 ... if (nrest==2) { // 2 bytes left buf[0] = (byte)(( bytes[k] & 0xFC) >> 2); buf[1] = (byte)(((bytes[k] & 0x03) > 4)); buf[2] = (byte)(( bytes[k+1] & 0x0F) > 2); buf[1] = (byte)((bytes[k] & 0x03) 0) { // 发送尾部 if ((linelength += 4) >= 76) send(out, " "); send(out, BaseTable[buf[0]]); send(out, BaseTable[buf[1]]); // if (nrest==2) { send(out, BaseTable[buf[2]]); } else { send(out, "="); } send(out, "="); } out.flush(); //这里用到的send方法,请大家根据需要,自己写。可以是把结果输出到控制台,或发送邮件。 } catch (Exception e) { e.printStackTrace(); } } } 

分享到:
评论

相关推荐

    C/C++ Base64编解码开源库

    在C/C++中,处理Base64编解码通常需要自定义函数或者利用开源库。这个开源库提供了解决这个问题的方法。 1. **Base64编码原理** - Base64编码是将每3个字节(24位)的数据转换为4个6位的字符(每个字符对应Base64...

    易语言源码易语言Base64编解码新汇编源码.rar

    在本压缩包“易语言源码易语言Base64编解码新汇编源码.rar”中,包含的是关于Base64编解码的易语言源码,以及可能使用了新的汇编技术编写的源代码。Base64是一种用于编码二进制数据的算法,常用于在网络上传输文本...

    C BASE64 编解码函数

    根据提供的文件信息,我们可以总结出以下关于“C BASE64 编解码函数”的相关知识点: ### C BASE64 编解码函数简介 #### 1. 基本概念 BASE64是一种用于将二进制数据转换为文本字符串的标准编码方法。这种编码方式...

    base64编解码C/C++实现

    9. **使用示例**:在`base64.cpp`和`base64.h`中提供的`main`函数可能是演示如何使用这两个函数的例子,可以通过它了解如何在C++程序中调用这些编解码方法。 10. **API设计**:`base64.h`文件通常会定义接口,如`...

    Base64编解码

    在E语言代码中实现Base64编解码可能包括以下几个关键步骤: 1. **编码过程**: - 分组:将输入的二进制数据按每3个字节分为一组。 - 转换:将每组的24位数据转换为4个6位的数字。 - 查表:使用Base64字符集(A-Z...

    易语言Base64编解码新汇编

    易语言Base64编解码新汇编是一个针对易语言平台开发的编解码工具,主要功能是实现Base64编码和解码。Base64是一种广泛使用的编码方式,尤其在传输二进制数据时,它能将二进制数据转化为可打印的ASCII字符,便于在...

    java的base64编解码

    base64编解码

    Base64编解码Demo

    在这个"Base64编解码Demo"中,我们将探讨如何将MAC地址和IP地址进行特定的位转换,然后使用Base64进行编码和解码。 首先,让我们了解MAC(Media Access Control)地址和IP(Internet Protocol)地址。MAC地址是网络...

    Base64编解码工具

    Base 64编解码,字符串变成64编码,Base64编码变成字符串,准确率100%

    Base64.dll(Base64编解码,附VB示例)

    Base64编码和解码库,支持API调用和COM调用,输入参数支持VB的字节数组Byte(),输出支持VB的字节数组Byte()和字符串String。编码速度大约为每秒钟256MB~380MB。 内附一个比较三方提供的比较经典的库VBVorLib,其...

    Base64编解码 C++实现

    Base64编解码是一种广泛应用于网络通信中的数据编码技术,尤其在处理包含二进制数据的文本格式如电子邮件时非常常见。它将任意的字节序列转换为一个由64个可打印ASCII字符组成的字符串,这64个字符包括大小写字母、...

    易语言Base64编解码新汇编源码

    易语言Base64编解码新汇编源码是一个针对易语言编程环境的代码资源,主要功能是实现Base64编码和解码。Base64是一种用于将任意二进制数据转换为可打印字符的编码方式,常用于在网络上传输包含二进制的数据,如图片或...

    电子邮件MIME协议中的Base64编解码

    电子邮件MIME协议中的Base64编解码 Base64编解码是MIME协议中的一种常用的编码方式,用于将二进制数据转换为文本数据,以便在电子邮件中传输。下面是 Base64 编解码的知识点: 1. 什么是Base64编解码? Base64编...

    base64编解码器

    在"base64.exe"这个文件中,我们看到的是一个Base64编解码器的可执行程序。通常这样的工具用于将文件或文本数据进行Base64编码或解码。编码器会接收二进制数据,如图片、音频文件或者任何非文本格式的数据,将其转换...

    Base64编解码工具,绿色小巧且免安装

    Base64编解码工具,绿色小巧且免安装。 是一款非常实用的工具。

    Base64 编解码

    Base64是一种编码方式,主要用于将二进制数据转换成...总之,Base64编解码是一种将二进制数据转换为ASCII字符串的技术,广泛应用于数据传输和存储。了解其原理和实现,对于理解和处理涉及二进制数据的IT任务至关重要。

    Base64编解码新汇编.rar

    易语言Base64编解码新汇编源码应该包含了实现这一功能的源代码,包括如何处理各种边界情况,如数据长度非3的倍数、处理Base64字符集的映射等细节。通过阅读和理解这些源码,开发者可以深入理解Base64编码机制,并...

Global site tag (gtag.js) - Google Analytics