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