package util;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
public class Base64 {
private static char[] base64EncodeChars = new char[] { '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 byte[] base64DecodeChars = new byte[] { -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, -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, -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, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, -1, -1, -1, -1, -1 };
private Base64() {
}
/**
* UTF-8编码解码
*
* @param s
* @return
*/
public static String encode(String s) {
if (s == null)
return null;
try {
return encodeBytes(s.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public static String decode(String s) {
if (s == null)
return null;
try {
return new String(decodeBytes(s), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public static String encodeBytes(byte[] data) {
StringBuffer sb = new StringBuffer();
int len = data.length;
int i = 0;
int b1, b2, b3;
while (i < len) {
b1 = data[i++] & 0xff;
if (i == len) {
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
sb.append("==");
break;
}
b2 = data[i++] & 0xff;
if (i == len) {
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
sb.append("=");
break;
}
b3 = data[i++] & 0xff;
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
sb.append(base64EncodeChars[b3 & 0x3f]);
}
return sb.toString();
}
public static byte[] decodeBytes(String str) {
byte[] data = str.getBytes();
int len = data.length;
ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
int i = 0;
int b1, b2, b3, b4;
while (i < len) {
/* b1 */
do {
b1 = base64DecodeChars[data[i++]];
} while (i < len && b1 == -1);
if (b1 == -1) {
break;
}
/* b2 */
do {
b2 = base64DecodeChars[data[i++]];
} while (i < len && b2 == -1);
if (b2 == -1) {
break;
}
buf.write((int) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
/* b3 */
do {
b3 = data[i++];
if (b3 == 61) {
return buf.toByteArray();
}
b3 = base64DecodeChars[b3];
} while (i < len && b3 == -1);
if (b3 == -1) {
break;
}
buf.write((int) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
/* b4 */
do {
b4 = data[i++];
if (b4 == 61) {
return buf.toByteArray();
}
b4 = base64DecodeChars[b4];
} while (i < len && b4 == -1);
if (b4 == -1) {
break;
}
buf.write((int) (((b3 & 0x03) << 6) | b4));
}
return buf.toByteArray();
}
public static void main(String[] args) throws Exception {
System.out
.println(decode("eyJJbWVpIjoiMDAwMDAwMDAwMCIsIkFwcElkIjoiMTAwMDAwMCIsIk1hYyI6ImI4MTdjMjQ5YWY2NSIsIkF0eXBlIjoxLCJQcml2YXRlRGF0YSI6IjQ1MTQ3NDEiLCJUcmFkZU5vIjoiNDUxNDc0MSJ9"));//
}
}
分享到:
相关推荐
在本压缩包中,包含了一个名为"Base64编码解码.e"的易语言源码文件和一个编译好的可执行文件"Base64解码工具.exe"。易语言是一种简洁明了的中文编程语言,旨在让普通用户也能轻松进行程序开发。使用易语言编写Base64...
**提供的"Base64编码解码工具":** 这个压缩包中的"Base64"文件应该是一个工具程序,用户无需安装,解压后直接运行即可对Base64文本进行编码和解码操作。这样的工具对于开发者、网络管理员或者需要处理Base64数据的...
在这个"base64编码解码离线工具"中,用户可以方便地对数据进行Base64编码和解码,而无需依赖互联网连接。这对于在无网络环境下处理数据或者保护隐私非常有用。开发者已经优化了工具的功能,增加了对换行符的支持。在...
2) 修复 BASE64编码解码,个别情况下不会选择AVX2模式的问题(C/C++的bool类型是单字节,易的逻辑型是4字节,易的逻辑型为真时 转为字节集可能是{0,0,1,0},导致单字节判断 时灵时不灵)。1.4更新(2019.6.5)。 1) 添加...
标题中的"Base64编码解码器"是一款工具软件,它能够对数据进行Base64的编码和解码操作。这款软件提供了三种不同的编码方式:ansi、utf-8和unicode。其中, 1. ANSI(American National Standards Institute)编码,...
Base64编码解码工具.exe
Base64编码解码类 Base64 Encode Decode
总之,"Base64编码解码工具.zip"包含了一个用Visual Studio和MFC开发的实用工具,能够方便地进行Base64编码和解码操作,对于开发者和普通用户来说都是一个便捷的工具。通过理解Base64编码的原理和这个工具的工作机制...
总之,Base64编码解码是计算机网络通信中不可或缺的一部分,尤其在处理二进制数据和跨平台兼容性问题时。提供的`base64.dll`和其函数说明,为开发者提供了一种方便的工具,使他们在各种开发环境下都能轻松实现Base64...
描述中提到的"Base64编码解码工具V1.5"是一款实用软件,能够帮助用户对Base64编码的数据进行解码。在使用过程中,用户只需选择"Base64"编码选项,软件就会自动处理输入的Base64字符串,将其还原为原始的二进制数据。...
无依赖的Base64编码解码工具是专为那些只能通过剪贴板在远程桌面环境下传输二进制文件设计的。这意味着该工具不需要额外的库或者外部依赖,可以在任何支持Delphi10开发的系统上独立运行。Delphi是Embarcadero公司...
这个标题所指的“BASE64编码解码”是一款用C#语言编写的软件,专门用于对数据进行BASE64的编码和解码操作。由于C#是微软开发的一种面向对象的编程语言,因此这款软件可能依赖于.NET框架,特别是提到的.NET 1.1环境,...
这个"非常好用base64编码解码工具"显然是一个能够帮助用户进行Base64编码和解码的软件。 Base64编码的原理是将每3个字节的数据拆分为4个6位的二进制数,然后将这些二进制数转换为对应的ASCII字符。由于2^6 = 64,...
C语言是编程语言的基础,被广泛应用于系统编程和嵌入式开发,因此一个C语言实现的Base64编码解码库对于开发者来说非常有用。下面将详细介绍这个名为"C语言base64编码解码库"的资源。 该库是从GitHub上获取的,这...
了解并熟练掌握Base64编码解码,对于易语言开发者来说,可以更方便地处理二进制数据,提高程序的功能性和兼容性。通过研究"base64.e"中的源代码,开发者可以深入理解其实现原理,并将其应用到自己的项目中。
二维码生成和图片Base64编码解码是两个在IT领域中常见的操作,广泛应用于数据传输、网页设计和移动应用等领域。下面将详细讲解这两个主题。 首先,二维码(Quick Response Code)是一种二维条形码,可以存储更多的...
压缩包中的`TestBase64.sln`文件可能是一个Visual Studio解决方案文件,用于开发一个Base64编码解码的示例项目。而`TestBase64`可能是项目中的源代码文件,包含了Base64编码和解码的实现。通过这些文件,你可以学习...