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

Base64 算法

阅读更多
public class Base64 {
    
private static final char[] S_BASE64CHAR = {
        
'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''+''/'
    }
;
    
private static final char S_BASE64PAD = '=';
    
private static final byte[] S_DECODETABLE = new byte[128];
    
static {
        
for (int i = 0;  i < S_DECODETABLE.length;  i ++)
            S_DECODETABLE[i] 
= Byte.MAX_VALUE;  // 127
        for (int i = 0;  i < S_BASE64CHAR.length;  i ++// 0 to 63
            S_DECODETABLE[S_BASE64CHAR[i]] = (byte)i;
    }


    
private static int decode0(char[] ibuf, byte[] obuf, int wp) {
        
int outlen = 3;
        
if (ibuf[3== S_BASE64PAD)  outlen = 2;
        
if (ibuf[2== S_BASE64PAD)  outlen = 1;
        
int b0 = S_DECODETABLE[ibuf[0]];
        
int b1 = S_DECODETABLE[ibuf[1]];
        
int b2 = S_DECODETABLE[ibuf[2]];
        
int b3 = S_DECODETABLE[ibuf[3]];
        
switch (outlen) {
          
case 1:
            obuf[wp] 
= (byte)(b0 << 2 & 0xfc | b1 >> 4 & 0x3);
            
return 1;
          
case 2:
            obuf[wp
++= (byte)(b0 << 2 & 0xfc | b1 >> 4 & 0x3);
            obuf[wp] 
= (byte)(b1 << 4 & 0xf0 | b2 >> 2 & 0xf);
            
return 2;
          
case 3:
            obuf[wp
++= (byte)(b0 << 2 & 0xfc | b1 >> 4 & 0x3);
            obuf[wp
++= (byte)(b1 << 4 & 0xf0 | b2 >> 2 & 0xf);
            obuf[wp] 
= (byte)(b2 << 6 & 0xc0 | b3 & 0x3f);
            
return 3;
          
default:
            
throw new RuntimeException("Internal Errror");
        }

    }


    
/** *//**
     * Decode the base64 data.
     * 
@param data The base64 encoded data to be decoded
     * 
@param off The offset within the encoded data at which to start decoding
     * 
@param len The length of data to decode
     * 
@return The decoded data
     
*/

    
public static byte[] decode(char[] data, int off, int len) {
        
char[] ibuf = new char[4];
        
int ibufcount = 0;
        
byte[] obuf = new byte[len/4*3+3];
        
int obufcount = 0;
        
for (int i = off;  i < off+len;  i ++{
            
char ch = data[i];
            
if (ch == S_BASE64PAD
                
|| ch < S_DECODETABLE.length && S_DECODETABLE[ch] != Byte.MAX_VALUE) {
                ibuf[ibufcount
++= ch;
                
if (ibufcount == ibuf.length) {
                    ibufcount 
= 0;
                    obufcount 
+= decode0(ibuf, obuf, obufcount);
                }

            }

        }

        
if (obufcount == obuf.length)
            
return obuf;
        
byte[] ret = new byte[obufcount];
        System.arraycopy(obuf, 
0, ret, 0, obufcount);
        
return ret;
    }


    
/** *//**
     * Decode the base64 data.
     * 
@param data The base64 encoded data to be decoded
     * 
@return The decoded data
     
*/

    
public static byte[] decode(String data) {
        
char[] ibuf = new char[4];
        
int ibufcount = 0;
        
byte[] obuf = new byte[data.length()/4*3+3];
        
int obufcount = 0;
        
for (int i = 0;  i < data.length();  i ++{
            
char ch = data.charAt(i);
            
if (ch == S_BASE64PAD
                
|| ch < S_DECODETABLE.length && S_DECODETABLE[ch] != Byte.MAX_VALUE) {
                ibuf[ibufcount
++= ch;
                
if (ibufcount == ibuf.length) {
                    ibufcount 
= 0;
                    obufcount 
+= decode0(ibuf, obuf, obufcount);
                }

            }

        }

        
if (obufcount == obuf.length)
            
return obuf;
        
byte[] ret = new byte[obufcount];
        System.arraycopy(obuf, 
0, ret, 0, obufcount);
        
return ret;
    }


    
/** *//**
     * Decode the base64 data.
     * 
@param
分享到:
评论

相关推荐

    Base64算法

    ### Base64算法详解 #### 一、Base64算法概述 Base64是一种常见的编码方式,虽然不是新技术,但对于很多从事页面开发的人来说并不陌生,尤其是在动态页面开发领域,特别是邮件服务方面。对于黑客而言,Base64的...

    Base64算法完整源码与调用方法

    Base64算法基于一个64字符的字母表,包括大小写字母、数字、加号(+)和斜线(/)。这64个字符分别代表0到63的数值。当二进制数据需要编码时,每3个字节(24位)被分成4组,每组6位。如果原始数据不是3的倍数,会在...

    JAVA Base64算法

    JAVA Base64算法 对字符进行64位编码,解码

    Base64算法完整源码与调用方法.rar

    在"Base64算法完整源码与调用方法.rar"压缩包中,可能包含了Base64算法的详细实现代码,包括Delphi的示例代码和其他相关资源,如文档或测试数据。通过解压并查看这些文件,你可以深入了解Base64算法的工作原理,并...

    base64算法

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,...

    c++实现base64算法加密解密

    c++实现base64算法加密解密,不需要修改,直接运行即可

    java模拟实现base64算法的编码过程

    Base64是一种网络上常见的用于传输8位字节序列(通常为ASCII字符)的编码方式,它将任意的字节序列转换成一种可打印的字符序列。这种编码方法主要用于在电子邮件系统、MIME格式和HTML中传输二进制数据。在Java中,...

    delphi base64算法演示案例

    下面我们将深入探讨Base64算法及其在Delphi中的应用。 Base64算法基于64个可打印的ASCII字符,包括大小写字母、数字和两个特殊符号`+`和`/`,以及一个填充字符`=`。它通过将每3个8位字节的数据转换为4个6位的字节,...

    C/C++实现的BASE64算法,100%好用

    本文将深入探讨C/C++实现的BASE64算法,这是一种常见的数据编码方法,用于将二进制数据转换为ASCII字符串,以便在网络上传输或者在文本格式中存储。 首先,我们需要了解BASE64的基本原理。BASE64是一种基于64个字符...

    Base64算法实现对文件加解密(附代码)

    ### Base64算法实现对文件加解密 #### 一、Base64算法简介 Base64是一种基于64个可打印字符来表示二进制数据的编码方法。它广泛应用于电子邮件、网络通信以及需要将二进制数据通过非二进制安全或不可靠通道传输的...

    C#编写Base64算法及应用程序下载网页代码

    本项目提供了针对UTF-8和普通编码的Base64算法,同时具备查看和下载网页前端代码的功能。 首先,让我们详细了解一下Base64编码。Base64使用64个字符(包括大小写字母、数字以及"+"和"/")来表示二进制数据的每6位,...

    Base64算法源码

    Base64算法基于64个可打印字符,将每3个8位字节的数据块转换成4个6位的字节,然后将这4个6位字节转换成对应的Base64字符,最终形成的结果是可读的文本。 Base64编码的基本原理是将24位的三个字节拆分为4个6位的...

    BASE64算法示例

    在"BASE64算法示例"中,我们可以讨论以下几个关键知识点: 1. **编码原理**:BASE64的基本思想是将每3个8位字节(24位)的数据块转换为4个6位的数字,然后用64字符集中的每个字符来表示这6位数字。由于64字符不足以...

    Base64算法完整源码

    在提供的"Base64算法完整源码与调用方法"文件中,你可能会找到以下关键部分: 1. 编码函数:这个函数接受二进制数据,执行上述的分组、转换和填充操作。 2. 解码函数:这个函数接收Base64编码字符串,处理填充,...

    C++Review 实现与数据库连接并用到Base64算法和随机数算法代码

    在本项目中,我们看到"C++Review"的重点是实现数据库连接,同时利用了Base64编码算法和随机数生成算法。下面我们将详细探讨这些知识点。 1. **ADO库**:ADO是微软提供的一个接口,用于访问各种数据源,包括关系型...

    计算机软件-编程源码-Base64算法完整源码与调用方法.zip

    在压缩包"Base64算法完整源码与调用方法"中,可能包含了多种编程语言实现的Base64编码和解码的源代码示例,以及如何在项目中调用这些函数的说明。通过学习和理解这些源码,开发者可以更好地掌握Base64的工作原理,并...

    base64算法实现

    base64算法实现,有使用sun.misc.BASE64Decoder工具类的,也有自己写的算法实现

Global site tag (gtag.js) - Google Analytics