关于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 加密解密 代码 包括jar
Java Base64加密解密方法工具类
参照网上Base64 js加密解密写的java实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。 因为是参照 js Base64写的java实现,所以代码可实现前台js,后台java的加密,...
用Java实现base64的加密解密
java开发使用base64进行加密解密,开发人员只需调用其中方法即可完成加密解密操作!
java实现SHA1、SHA、MD5、AES加密、AES解密、BASE64解密、BASE64加密,以及apache BASE64 jar和源码
java代码实例 AES加密解密 Base64加密解密
java base64 算法 java实现base64加密 解密
用过无问题,已经写了一份好详细的word文档。如果还是不会请留言。
Base64加密解密java工具类
Base64 加密解密小工具 Base64 加密解密小工具 Base64 加密解密小工具
Base64加密与解密的实现,用java代码实现,下载即可放入工程中。
Base64 解密成明文,Base64 加密成Java密文. 参数输入输出流 共三个java文件。
pb和java对称base64加密解密 有PB源码和JAVA源码 并且附有md5加密 pb和java中都有加密解密源码 有源码才是王道
jquery实现的加密解密算法,页面经过jquery加密后,提交到后台,通过java的base64解密算法可以原样解析, demo中用的是servlet和jquery的$.ajax实现...
在项目开发中,会遇到前台js接收后台java传递的加密字符串,然后由js解密...或是后端java接收前台由js进行base64加密后的字符串,然后由java解密后进行处理。本文针对这种情况给出一种可行方法,且解决了中文乱码问题。
使用Apache.commons,可以设置密钥,加密解密
java版的base64加密解密,亲自试过,效果不错
Base64加密解密实例
对文件进行zip压缩 和base64加密和解密的几个工具类