`

BASE64Encoder

阅读更多

package com.avetti.util;
/**
* A Base64 Encoder/Decoder.
*
* <p>
* This class is used to encode and decode data in Base64 format as described in RFC 1521.
*
* <p>
* This is "Open Source" software and released under the <a href="http://www.gnu.org/licenses/lgpl.html">GNU/LGPL</a> license.<br>
* It is provided "as is" without warranty of any kind.<br>
* Home page: <a href="http://www.source-code.biz">www.source-code.biz</a><br>
*
* <p>
* &nbsp; Method encode(String) renamed to encodeString(String).<br>
* &nbsp; Method decode(String) renamed to decodeString(String).<br>
* &nbsp; New method encode(byte[],int) added.<br>
* &nbsp; New method decode(String) added.<br>
*/

public class BASE64Encoder {

// Mapping table from 6-bit nibbles to Base64 characters.
private static char[] map1 = new char[64];
static {
int i=0;
for (char c='A'; c<='Z'; c++) map1[i++] = c;
for (char c='a'; c<='z'; c++) map1[i++] = c;
for (char c='0'; c<='9'; c++) map1[i++] = c;
map1[i++] = '+'; map1[i++] = '/'; }

// Mapping table from Base64 characters to 6-bit nibbles.
private static byte[] map2 = new byte[128];
static {
for (int i=0; i<map2.length; i++) map2[i] = -1;
for (int i=0; i<64; i++) map2[map1[i]] = (byte)i; }

/**
* Encodes a string into Base64 format.
* No blanks or line breaks are inserted.
* @param s a String to be encoded.
* @return A String with the Base64 encoded data.
*/
public static String encodeString (String s) {
return new String(encode(s.getBytes())); }

/**
* Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted.
* @param in an array containing the data bytes to be encoded.
* @return A character array with the Base64 encoded data.
*/
public static char[] encode (byte[] in) {
return encode(in,in.length); }

/**
* Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted.
* @param in an array containing the data bytes to be encoded.
* @param iLen number of bytes to process in <code>in</code>.
* @return A character array with the Base64 encoded data.
*/
public static char[] encode (byte[] in, int iLen) {
int oDataLen = (iLen*4+2)/3; // output length without padding
int oLen = ((iLen+2)/3)*4; // output length including padding
char[] out = new char[oLen];
int ip = 0;
int op = 0;
while (ip < iLen) {
int i0 = in[ip++] & 0xff;
int i1 = ip < iLen ? in[ip++] & 0xff : 0;
int i2 = ip < iLen ? in[ip++] & 0xff : 0;
int o0 = i0 >>> 2;
int o1 = ((i0 & 3) << 4) | (i1 >>> 4);
int o2 = ((i1 & 0xf) << 2) | (i2 >>> 6);
int o3 = i2 & 0x3F;
out[op++] = map1[o0];
out[op++] = map1[o1];
out[op] = op < oDataLen ? map1[o2] : '='; op++;
out[op] = op < oDataLen ? map1[o3] : '='; op++; }
return out; }

/**
* Decodes a string from Base64 format.
* @param s a Base64 String to be decoded.
* @return A String containing the decoded data.
* @throws IllegalArgumentException if the input is not valid Base64 encoded data.
*/
public static String decodeString (String s) {
return new String(decode(s)); }

/**
* Decodes a byte array from Base64 format.
* @param s a Base64 String to be decoded.
* @return An array containing the decoded data bytes.
* @throws IllegalArgumentException if the input is not valid Base64 encoded data.
*/
public static byte[] decode (String s) {
return decode(s.toCharArray()); }

/**
* Decodes a byte array from Base64 format.
* No blanks or line breaks are allowed within the Base64 encoded data.
* @param in a character array containing the Base64 encoded data.
* @return An array containing the decoded data bytes.
* @throws IllegalArgumentException if the input is not valid Base64 encoded data.
*/
public static byte[] decode (char[] in) {
int iLen = in.length;
if (iLen%4 != 0) throw new IllegalArgumentException ("Length of Base64 encoded input string is not a multiple of 4.");
while (iLen > 0 && in[iLen-1] == '=') iLen--;
int oLen = (iLen*3) / 4;
byte[] out = new byte[oLen];
int ip = 0;
int op = 0;
while (ip < iLen) {
int i0 = in[ip++];
int i1 = in[ip++];
int i2 = ip < iLen ? in[ip++] : 'A';
int i3 = ip < iLen ? in[ip++] : 'A';
if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127)
throw new IllegalArgumentException ("Illegal character in Base64 encoded data.");
int b0 = map2[i0];
int b1 = map2[i1];
int b2 = map2[i2];
int b3 = map2[i3];
if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0)
throw new IllegalArgumentException ("Illegal character in Base64 encoded data.");
int o0 = ( b0 <<2) | (b1>>>4);
int o1 = ((b1 & 0xf)<<4) | (b2>>>2);
int o2 = ((b2 & 3)<<6) | b3;
out[op++] = (byte)o0;
if (op<oLen) out[op++] = (byte)o1;
if (op<oLen) out[op++] = (byte)o2; }
return out; }

// Dummy constructor.
private BASE64Encoder() {}

} // end class Base64Coder

分享到:
评论

相关推荐

    BASE64Encoder.zip

    在这个"BASE64Encoder.zip"压缩包中包含了一个名为"BASE64Encoder.jar"的文件,这很可能是一个Java实现的BASE64编码和解码工具。 在Java中,`java.util.Base64`类库提供了对BASE64编码和解码的支持。这个"BASE64...

    BASE64Encoder.jar

    BASE64Encoder.jar 是一个Java实现的Base64编码解码工具包,它主要用于在ASCII字符串和二进制数据之间进行转换。Base64是一种网络上常见的数据编码方式,尤其在电子邮件、HTTP传输以及XML文档中广泛使用。这是因为...

    base64encoder jar包

    Base64Encoder.jar包是Java开发中用于进行Base64编码和解码的工具包,它可以帮助开发者在处理数据时,将二进制数据转换为可打印的ASCII字符串,反之亦然。在Java标准库中,虽然已经包含了`java.util.Base64`类来执行...

    sun.misc.BASE64Encoder源码及jar包

    在Java编程语言中,`sun.misc.BASE64Encoder`和`BASE64Decoder`是用于进行Base64编码和解码的内部类,它们属于`sun.misc`包,这是一个非公开(非标准)的Java库。`sun.misc`包中的类主要用于JVM内部使用,因此在官方...

    sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用已解决

    最近项目实验发现导入工具程序后项目有错,查看发现sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用,找不到相应的类。 二、原因分析 冲浪后发现JDK中的lib\tools.jar和JRE中的lib\rt.jar已从Java SE 9中...

    sun.misc.BASE64Encoder 加密源码+完整包.rar

    在Java编程语言中,`sun.misc.BASE64Encoder` 和 `sun.misc.BASE64Decoder` 是两个用于Base64编码和解码的内部类,它们位于`sun.misc`包下。Base64是一种用于在网络上传输二进制数据的文本编码方式,它将任意的字节...

    BASE64Encoder 与 BASE64Decoder 源代码

    在Java中,`BASE64Encoder`和`BASE64Decoder`是两个核心类,分别用于对数据进行BASE64编码和解码。 `BASE64Encoder`类: 这个类在Java SDK中位于`javax.crypto`包下,主要负责将字节序列(byte array)转换为BASE...

    sun.misc.BASE64Encoder.jar包

    `sun.misc.BASE64Encoder`和`sun.misc.BASE64Decoder`就是这样的两个类,它们分别用于Base64编码和解码。 Base64是一种用于将二进制数据转换为可打印ASCII字符的编码方式,常用于在网络上传输二进制数据,如电子...

    android需要的BASE64Encoder的jar包

    啥都不说了,CSDN都要30多分,抢钱啊,我着急下载,没有那么多分,对那些...android需要的BASE64Encoder的jar包,欢迎大家下载使用,为什么要5分,是因为,为了下载这么个破jar包,我花干了我的分,也是为了凑够字数。

    sun.misc.BASE64Encoder 找不到

    在Java编程中,`sun.misc.BASE64Encoder` 类曾是Java标准库早期版本中用于进行Base64编码的一个工具类。然而,由于这个类属于Sun Microsystems的内部实现细节,自Java 9开始,它被标记为废弃,并在后续版本中逐步...

    BASE64Encoder加密与解密

    然而,需要注意的是,这两个类自JDK 9起已被弃用,建议使用`java.util.Base64`包中的`Base64.getEncoder()`和`Base64.getDecoder()`方法来进行BASE64的编码和解码工作。 #### 示例代码分析 给出的代码示例展示了...

    apache-commons-codec-1.4.jar和sun.misc.BASE64Encoder.jar

    在Java中,`sun.misc.BASE64Encoder`和`sun.misc.BASE64Decoder`是用于处理BASE64编码和解码的类,它们位于`sun.misc`包下,这是一个非公开的、由Sun Microsystems提供的包,主要用于JVM内部使用。 然而,需要注意...

    sun.misc.BASE64Encoder.jar

    在Java平台上,`sun.misc.BASE64Encoder`类被用来实现BASE64编码,但需要注意的是,这个类属于Java的非公开(sun.misc)包,官方并不推荐直接使用。 首先,我们来深入理解一下BASE64编码。BASE64编码是一种基于64个...

    Base64Encoder

    Base64Encoder是一种工具或函数,它主要用于将图像文件转换为Base64编码字符串。Base64是一种在不支持二进制数据传输的环境中传递二进制数据的常见方法,如在HTML、CSS或JavaScript中。它通过将二进制数据转化为...

    BASE64Encoder编码转换

    将BASE64Encoder编码与普通字节的互相转换,很好用!

    BASE64Encoder及BASE64Decoder的源码

    `Base64.Encoder`接口代表Base64编码器,而`Base64.Decoder`接口代表Base64解码器。你可以通过`Base64.getEncoder()`和`Base64.getDecoder()`获取默认的编码器和解码器实例。例如: ```java import java.util.Base...

    rt.jar sun.misc.BASE64Encoder sun.misc.BASE64Decoder 找不到jar包

    sun.misc.BASE64Encoder 找不到jar包

    sun.misc.BASE64Encoder下载

    BASE64Encode 编码,在andorid没有这个编码,这里面有打成jar包,可以导进去。用源代码打包的。手懒不愿意自己弄得话,可以下载导进去。里面附带着源代码,也可将源代码开进去直接使用,希望能帮助大家。

Global site tag (gtag.js) - Google Analytics