Base64加密解密实现

来源:互联网 发布:魔方数据恢复如何使用 编辑:程序博客网 时间:2024/05/21 08:51

加密代码

类名: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;elsereturn 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 自动生成方法存根}}


0 0
原创粉丝点击