关于Base64编码规则详情请看这里:
http://baike.baidu.com/view/469071.htm
代码实现:
/**
* 实现Base64的编码以及解码;
* @author dell
*
*/
public class SelfBase64 {
/**
* 码表;
*/
public static char[] encodeTable={'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', '+', '/'};
/**
* Base64的编码;
* @param value
* @return
*/
public static String encoderBase64(byte[] value){
StringBuilder sb=new StringBuilder();
//获取编码字节是3的倍数;
int len=value.length;
int len3=len/3;
//先处理没有加换行符;
for(int i=0;i<len3;i++){
//得到第一个字符;
int b1=(value[i*3]>>2)&0x3F;
char c1=encodeTable[b1];
sb.append(c1);
//得到第二个字符;
int b2=((value[i*3]<<4&0x3F)+(value[i*3+1]>>4))&0x3F;
char c2=encodeTable[b2];
sb.append(c2);
//得到第三个字符;
int b3=((value[i*3+1]<<2&0x3C)+(value[i*3+2]>>6))&0x3F;
char c3=encodeTable[b3];
sb.append(c3);
//得到第四个字符;
int b4=value[i*3+2]&0x3F;
char c4=encodeTable[b4];
sb.append(c4);
}
//如果有剩余的字符就补0;
//剩余的个数;
int less=len%3;
if(less==1){//剩余一个字符--补充两个等号;;
//得到第一个字符;
int b1=value[len3*3]>>2&0x3F;
char c1=encodeTable[b1];
sb.append(c1);
//得到第二个字符;
int b2=(value[len3*3]<<4&0x30)&0x3F;
char c2=encodeTable[b2];
sb.append(c2);
sb.append("==");
}else if(less==2){//剩余两个字符--补充一个等号;
//得到第一个字符;
int b1=value[len3*3]>>2&0x3F;
char c1=encodeTable[b1];
sb.append(c1);
//得到第二个字符;
int b2=((value[len3*3]<<4&0x30)+(value[len3*3+1]>>4))&0x3F;
char c2=encodeTable[b2];
sb.append(c2);
//得到第三个字符;
int b3=(value[len3*3+1]<<2&0x3C)&0x3F;
char c3=encodeTable[b3];
sb.append(c3);
sb.append("=");
}
return sb.toString();
}
/**
* Base64的解码;
* @param value
* @return
*/
public static String decoderBase64(byte[] value){
//每四个一组进行解码;
int len=value.length;
int len4=len/4;
StringBuilder sb=new StringBuilder();
//除去末尾的四个可能特殊的字符;
int i=0;
for(i=0;i<len4-1;i++){
//第一个字符;
byte b1=(byte) ((char2Index((char)value[i*4])<<2)+(char2Index((char)value[i*4+1])>>4));
sb.append((char)b1);
//第二个字符;
byte b2=(byte) ((char2Index((char)value[i*4+1])<<4)
+(char2Index((char)value[i*4+2])>>2));
sb.append((char)b2);
//第三个字符;
byte b3=(byte) ((char2Index((char)value[i*4+2])<<6)+(char2Index((char)value[i*4+3])));
sb.append((char)b3);
}
//处理最后的四个字符串;
for(int j=0;j<3;j++){
int index=i*4+j;
if((char)value[index+1]!='='){
if(j==0){
byte b=(byte) ((char2Index((char)value[index])<<2)
+(char2Index((char)value[index+1])>>4));
System.out.println(">>>>>>"+b);
sb.append((char)b);
}else if(j==1){
byte b=(byte) ((char2Index((char)value[index])<<4)
+(char2Index((char)value[index+1])>>2));
System.out.println(">>>>>>"+b);
sb.append((char)b);
}else if(j==2){
byte b=(byte) ((char2Index((char)value[index])<<6)
+(char2Index((char)value[index+1])));
System.out.println(">>>>>>"+b);
sb.append((char)b);
}
}else{
break;
}
}
return sb.toString();
}
/**
* 将码表中的字符映射到索引值;
* @param ch
* @return
*/
public static int char2Index(char ch){
if(ch>='A'&&ch<='Z'){
return ch-'A';
}else if(ch>='a'&&ch<='z'){
return 26+ch-'a';
}else if(ch>='0'&&ch<='9'){
return 52+ch-'0';
}else if(ch=='+'){
return 62;
}else if(ch=='/'){
return 63;
}
return 0;
}
}
注意在电子邮件中编码时每76个字符需要加回车换行符,此时修改代码如下:
/**
* 电子邮件中的base64编码方式;
* @param value
* @return
*/
public static String encodeEmailBase64(byte[] value){
//每76个字符需要加上一个换行符;
String v=new String(value);
StringBuilder sb = new StringBuilder();
int len=value.length;
int len76=len/76;
int i=0;
for(i=0;i<len76;i++){
sb.append(v.substring(i*76, i*76+76));
sb.append("\r\n");
}
sb.append(v.substring(i*76));
return encoderBase64(sb.toString().getBytes());
}
/**
* 电子邮件中的base64解码方式;
* @param value
* @return
*/
public static String decoderEmailBase64(byte[] value){
//解密之后去掉回车换行符;
String decResult=decoderBase64(value);
String result=decResult.replaceAll("\r\n", " ");
return result;
}
分享到:
相关推荐
在Java编程中,图片Base64加密解密是一种常见的数据处理技术,特别是在网络传输和存储时,由于Base64编码可以将二进制数据转换为可打印的ASCII字符,因此非常适用。`sun.misc.BASE64Encoder`和`sun.misc.BASE64...
Java Base64加密解密方法工具类
参照网上Base64 js加密解密写的java实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。 因为是参照 js Base64写的java实现,所以代码可实现前台js,后台java的加密,...
另外,`BASE64加密解密 方法.txt`很可能是详细介绍了如何在Java中实现BASE64加密解密的步骤和技术细节。 综上所述,BASE64加密解密在Java开发中是一个实用的技术,它允许开发者轻松地在二进制数据和ASCII字符串之间...
总之,Java提供了方便的`java.util.Base64`工具类来处理Base64编码和解码,使得在Java项目中实现Base64加密解密变得简单且高效。这个基础的加密解密机制虽然简单,但在很多场景下已经足够满足基本的数据保护需求。
java开发使用base64进行加密解密,开发人员只需调用其中方法即可完成加密解密操作!
本文将详细探讨如何在Hive中自定义User Defined Function(UDF)来实现Base64的加密和解密。 首先,我们需要了解Base64的基本原理。Base64是一种将任意二进制数据转化为ASCII字符集的方法,它通过将每3个字节转换为...
在给定的"java_base64加密解密实例"中,我们将探讨如何使用Apache Commons库进行Base64的加密和解密操作,并设置自定义密钥来增强安全性。 Apache Commons Codec库提供了Base64工具类,它包含了Base64编码和解码的...
在压缩包中的"java加密、解密"文件中,很可能包含了实现这些加密解密操作的Java代码示例,包括类、方法和可能的测试用例。通过阅读和学习这些代码,开发者可以更好地理解和应用上述加密算法,同时了解如何在实际项目...
总的来说,Base64是一种在不同系统之间传输二进制数据的便捷手段,而“Base64 加密解密小工具”则为用户提供了一个方便快捷的实现这一功能的平台。通过理解和熟练运用这类工具,可以更好地处理各种涉及二进制数据...
java代码实例 AES加密解密 Base64加密解密
Base64加密解密java工具类
本主题将深入探讨“Base64转码解密成明文”以及“Base64加密成Java密文”的过程,并介绍相关的Java实现。 首先,我们来看Base64解码。Base64编码的基本原理是将每3个字节的数据(24位)分成4组,每组6位,然后将这6...
`jQuery`的Base64实现解决了这个问题,使得包含中文的字符串也可以安全地进行Base64转换。 描述中提到,加密发生在前端,使用`jQuery`,然后解密在后台,可能是Java环境中的Servlet。`jQuery`的`$.ajax`方法用于...
在标题"pb和java对称base64加密解密"中,涉及到了两个编程语言——PowerBuilder(pb)和Java,以及一种常用的编码方式——Base64。同时,描述中提到了MD5加密,这又是一种常见的哈希加密算法。下面我们将详细探讨...
本文将详细介绍一个基于Java Base64的Android加密解密工具类,该工具类支持公钥加密和私钥解密,具有高度的解耦性,方便集成到项目中。 一、Base64加密解密基础 Base64是一种编码方式,它将任意二进制数据转换为可...
Base64加密与解密的实现,用java代码实现,下载即可放入工程中。
下面我们将详细探讨如何在Java中实现Base64加密和解密: 1. **Base64编码**: 使用`java.util.Base64.Encoder`接口的`encodeToString()`方法可以将字节数组编码为Base64字符串。例如: ```java byte[] bytes = ...
总的来说,这个资源为Android开发者提供了一套完整的BASE64加密解密解决方案,无论你是想要学习BASE64的工作原理,还是希望快速集成到项目中,这个压缩包都能满足需求。通过理解并应用这些知识,开发者能够更好地...
在项目开发中,会遇到前台js接收后台java传递的加密字符串,然后由js解密...或是后端java接收前台由js进行base64加密后的字符串,然后由java解密后进行处理。本文针对这种情况给出一种可行方法,且解决了中文乱码问题。