加密代码
类名: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 自动生成方法存根 } }