base64加密算法的java实现

来源:互联网 发布:单片机用什么编程 编辑:程序博客网 时间:2024/05/23 00:46
package cn.edu.njust.ch05;/** * 实现Base64的编码以及解码; * @author dell * */ public class Base64Self { /** * 码表; */ 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>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; } /** * 电子邮件中的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; } public static void main(String[] args) {String str="A";String result=new Base64Self().encodeEmailBase64(str.getBytes());System.out.println(result);} }
0 0
原创粉丝点击