Base64加密解密实现

加密代码

类名:Base64Encode

package cn.lfd.demo;
import java.util.Scanner;
public class Base64Encode {

	/**
	 * @param args
	 */
	final byte[] array = {'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','+','/'};
	public String Encode(byte [] toEncode){
		byte [] text = toEncode;
		byte [] transit = new byte[3];
		byte [] result = new byte[4];
		byte c1 = 0;
		byte c2 = 0;
		byte d1 = 0;
		byte d2 = 0;	
		StringBuffer sb = new StringBuffer("");
		int len = text.length;
		int discuss = len/3;
		int remainder = len % 3;
		for(int i = 0; i < discuss; i++){
			transit[0] = text[3*i];
			transit[1] = text[3*i + 1];
			transit[2] = text[3*i + 2];
			result[0] = (byte)(transit[0] >> 2);
			c1 = (byte)((byte)(transit[0] << 4) & (byte)(0x30));
			c2 = (byte)((byte)(transit[1] >> 4) & (byte)(0x0f));
			result[1] = (byte)((byte)c1 | (byte)c2);
			d1 = (byte)((transit[1] << 2) & (byte)0x3c);
			d2 = (byte)((byte)(transit[2] >> 6) & (byte)0x03);
			result[2] = (byte) (d1 | d2);
			result[3] = (byte)((byte)(transit[2]) & (byte)(0x3f));
			for(int j =0;j< 4;j++){
				sb = sb.append((char)array[result[j]]);
			}	
		}
		if(remainder == 1){
			transit[0] = text[3*discuss];
			result[0] = (byte)(transit[0] >> 2);
			result[1] = (byte)((byte)(transit[0] << 4) & (byte)(0x30));
			sb = sb.append((char)array[result[0]]);
			sb = sb.append((char)array[result[1]]);
			sb = sb.append("==");
		}
		
		if(remainder == 2){
			transit[0] = text[3 * discuss];
			transit[1] = text[3 * discuss +1];
			result[0] = (byte)(transit[0] >> 2);
			c1 = (byte)((byte)(transit[0] << 4) & (byte)(0x30));
			c2 = (byte)((byte)(transit[1] >> 4) & (byte)(0x0f));
			result[1] = (byte)((byte)c1 | (byte)c2);
			result[2] = (byte)((byte)(transit[1] << 2) & (byte)(0x3c));
			for(int k = 0; k < 3;k++){
				sb = sb.append((char)array[result[k]]);
			}
			sb = sb.append("=");
		}
		
		String encodeData = new String(sb);
		return encodeData;
	}
	
	public boolean equals_byte(byte[] array1,byte [] array2,int length) {
		// TODO 自动生成方法存根
		int i;
		for(i = 0;i < length; i ++){
			if(array1[i] != array2[i])
				break;
		}
		if(i == length)
			return true;
		else
			return false;
	}

	public static void main(String[] args) {
		// TODO 自动生成方法存根
		int i;
		Base64Encode base64_encode = new Base64Encode();
		Base64Decode base64_decode = new Base64Decode();
		System.out.println("请输入要编码的字符:");
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();
		byte [] testArray = str.getBytes();
		String result = base64_encode.Encode(testArray);
		byte result_byte[] = base64_decode.Decode(result);

		boolean bool = base64_encode.equals_byte(result_byte, testArray, testArray.length);
		if(bool == true){
			System.out.println("Base64编解码成功!");
		}
		else{
			System.out.println("Base64编解码失败!");
		}
		System.out.println(result);
		
		System.out.println("解码为:"+new String(result_byte ,0 ,result_byte.length));
	}

}


解密代码:

类名为Base64Decode

package cn.lfd.demo;

public class Base64Decode {

	/**
	 * @param args
	 */
	final byte[] array = {'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','+','/'};
	public byte[] strBase64ToByte(String strBase64){
		byte decodedArray[] = new byte[strBase64.length()];
		for(int i = 0;i<strBase64.length();i++){
			switch (strBase64.charAt(i)) {
			case 'A':
			{
				decodedArray[i] = 0;
				break;
			}
			case 'B':
			{
				decodedArray[i] = 1;
				break;
			}
			case 'C':
			{
				decodedArray[i] = 2;
				break;
			}
			case 'D':
			{
				decodedArray[i] = 3;
				break;
			}
			case 'E':
			{
				decodedArray[i] = 4;
				break;
			}
			case 'F':
			{
				decodedArray[i] = 5;
				break;
			}
			case 'G':
			{
				decodedArray[i] = 6;
				break;
			}
			case 'H':
			{
				decodedArray[i] = 7;
				break;
			}
			case 'I':
			{
				decodedArray[i] = 8;
				break;
			}
			case 'J':
			{
				decodedArray[i] = 9;
				break;
			}
			case 'K':
			{
				decodedArray[i] = 10;
				break;
			}
			case 'L':
			{
				decodedArray[i] = 11;
				break;
			}
			case 'M':
			{
				decodedArray[i] = 12;
				break;
			}
			case 'N':
			{
				decodedArray[i] = 13;
				break;
			}
			case 'O':
			{
				decodedArray[i] = 14;
				break;
			}
			case 'P':
			{
				decodedArray[i] = 15;
				break;
			}
			case 'Q':
			{
				decodedArray[i] = 16;
				break;
			}
			case 'R':
			{
				decodedArray[i] = 17;
				break;
			}
			case 'S':
			{
				decodedArray[i] = 18;
				break;
			}
			case 'T':
			{
				decodedArray[i] = 19;
				break;
			}
			case 'U':
			{
				decodedArray[i] = 20;
				break;
			}
			case 'V':
			{
				decodedArray[i] = 21;
				break;
			}
			case 'W':
			{
				decodedArray[i] = 22;
				break;
			}
			case 'X':
			{
				decodedArray[i] = 23;
				break;
			}
			case 'Y':
			{
				decodedArray[i] = 24;
				break;
			}
			case 'Z':
			{
				decodedArray[i] = 25;
				break;
			}
			case 'a':
			{
				decodedArray[i] = 26;
				break;
			}
			case 'b':
			{
				decodedArray[i] = 27;
				break;
			}
			case 'c':
			{
				decodedArray[i] = 28;
				break;
			}
			case 'd':
			{
				decodedArray[i] = 29;
				break;
			}
			case 'e':
			{
				decodedArray[i] = 30;
				break;
			}
			case 'f':
			{
				decodedArray[i] = 31;
				break;
			}
			case 'g':
			{
				decodedArray[i] = 32;
				break;
			}
			case 'h':
			{
				decodedArray[i] = 33;
				break;
			}
			case 'i':
			{
				decodedArray[i] = 34;
				break;
			}
			case 'j':
			{
				decodedArray[i] = 35;
				break;
			}
			case 'k':
			{
				decodedArray[i] = 36;
				break;
			}
			case 'l':
			{
				decodedArray[i] = 37;
				break;
			}
			case 'm':
			{
				decodedArray[i] = 38;
				break;
			}
			case 'n':
			{
				decodedArray[i] = 39;
				break;
			}
			case 'o':
			{
				decodedArray[i] = 40;
				break;
			}
			case 'p':
			{
				decodedArray[i] = 41;
				break;
			}
			case 'q':
			{
				decodedArray[i] = 42;
				break;
			}
			case 'r':
			{
				decodedArray[i] = 43;
				break;
			}
			
			
			case 's':
			{
				decodedArray[i] = 44;
				break;
			}
			case 't':
			{
				decodedArray[i] = 45;
				break;
			}
			case 'u':
			{
				decodedArray[i] = 46;
				break;
			}
			case 'v':
			{
				decodedArray[i] = 47;
				break;
			}
			case 'w':
			{
				decodedArray[i] = 48;
				break;
			}
			
			case 'x':
			{
				decodedArray[i] = 49;
				break;
			}
			case 'y':
			{
				decodedArray[i] = 50;
				break;
			}
			case 'z':
			{
				decodedArray[i] = 51;
				break;
			}
			case '0':
			{
				decodedArray[i] = 52;
				break;
			}
			case '1':
			{
				decodedArray[i] = 53;
				break;
			}
			case '2':
			{
				decodedArray[i] = 54;
				break;
			}
			case '3':
			{
				decodedArray[i] = 55;
				break;
			}
			
			case '4':
			{
				decodedArray[i] = 56;
				break;
			}
			case '5':
			{
				decodedArray[i] = 57;
				break;
			}
			case '6':
			{
				decodedArray[i] = 58;
				break;
			}
			case '7':
			{
				decodedArray[i] = 59;
				break;
			}
			case '8':
			{
				decodedArray[i] = 60;
				break;
			}
			case '9':
			{
				decodedArray[i] = 61;
				break;
			}
			case '+':
			{
				decodedArray[i] = 62;
				break;
			}
			case '/':
			{
				decodedArray[i] = 63;
				break;
			}
			case '=':
			{
				decodedArray[i] = 0;
				break;
			}
			
			}
			
		}
		return decodedArray;
	}
	public byte[] Decode(String strEncode){
		Base64Decode base64 = new Base64Decode();
		String strTransit = strEncode;
		int strTansitLen = strEncode.length();
		int discuss = strTansitLen/4;
		byte decodedArray[] = new byte[discuss*3];
		byte encodedArray[] = base64.strBase64ToByte(strEncode);
		byte c1,c2,d1,d2,e1,e2,f1,f2,h1;
		int index = strTransit.indexOf("=", strTansitLen - 4);
		
		
		if(index == -1){
			for(int i = 0;i < discuss;i++){
				c1 =(byte)((byte) (encodedArray[4*i] << 2) & (byte)(0xfc));
				c2 =(byte)((byte) (encodedArray[4*i +1] >> 4) & (byte)(0x03));
				decodedArray[3*i] = (byte)(c1 | c2);
				d1 =(byte)((byte) (encodedArray[4*i +1] << 4) & (byte)(0xfc));
				d2 =(byte)((byte) (encodedArray[4*i +2] >> 2) & (byte)(0x0f));
				decodedArray[3*i+1] = (byte)(d1 | d2);
				e1 =(byte)((byte) (encodedArray[4*i +2] << 6) & (byte)(0xc0));
				decodedArray[3*i+2] = (byte)(e1 | encodedArray[4*i +3]);
			}
		}
		
		
		else if(index == strTansitLen -2){
			for(int i = 0;i < discuss-1;i++){
				c1 =(byte)((byte) (encodedArray[4*i] << 2) & (byte)(0xfc));
				c2 =(byte)((byte) (encodedArray[4*i +1] >> 4) & (byte)(0x03));
				decodedArray[3*i] = (byte)(c1 | c2);
				d1 =(byte)((byte) (encodedArray[4*i +1] << 4) & (byte)(0xf0));
				d2 =(byte)((byte) (encodedArray[4*i +2] >> 2) & (byte)(0x0f));
				decodedArray[3*i+1] = (byte)(d1 | d2);
				e1 =(byte)((byte) (encodedArray[4*i +2] << 6) & (byte)(0xc0));
				decodedArray[3*i+2] = (byte)(e1 | encodedArray[4*i +3]);
		}
			e2 = (byte)((byte)(encodedArray[4*(discuss-1)] << 2) & (byte)(0xfc));
			f1 = (byte)((byte)(encodedArray[4*(discuss-1)+1] >> 4) & (byte)(0x03));
			decodedArray[3*(discuss-1)] = (byte)(e2 | f1);
		
	}
		
		
		else if(index == strTansitLen - 1){
			for(int i = 0;i < discuss-1;i++){
				c1 =(byte) ((byte)(encodedArray[4*i] << 2) & (byte)(0xfc));
				c2 =(byte)((byte) (encodedArray[4*i +1] >> 4) & (byte)(0x03));
				decodedArray[3*i] = (byte)(c1 | c2);
				d1 =(byte)((byte) (encodedArray[4*i +1] << 4) & (byte)(0xfc));
				d2 =(byte)((byte) (encodedArray[4*i +2] >> 2) & (byte)(0x0f));
				decodedArray[3*i+1] = (byte)(d1 | d2);
				e1 =(byte)((byte) (encodedArray[4*i +2] << 6) & (byte)(0xc0));
				decodedArray[3*i+2] = (byte)(e1 | encodedArray[4*i +3]);
			}
			e2 = (byte)((byte)(encodedArray[4*(discuss-1)] << 2) & (byte)(0xfc));
			f1 = (byte)((byte)(encodedArray[4*(discuss-1)+1] >> 4) & (byte)(0x03));
			decodedArray[3*(discuss-1)] = (byte)(e2 | f1);
			f2 = (byte)((byte)(encodedArray[4*(discuss-1)+1] << 4) & (byte)(0xf0));
			h1 = (byte)((byte)(encodedArray[4*(discuss-1)+2] >> 2) & (byte)(0x0f));
			decodedArray[3*(discuss-1)+1] = (byte)(f2 | h1);
		}
		
		
		return decodedArray;
		
		
	}
	public static void main(String[] args) {
		// TODO 自动生成方法存根

	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值