实现客户端加密,后台解密

   项目要求对数据传输进行加密,即在客户端未提交的时候进行加密,到后台服务器端进行解密,也就是要求用脚本加密,java解密或者java加密,脚本解密,在网上找了许久,只找到了单纯一种语言的加密解密,不是脚本就是java的,于是下载一个脚本加解密程序,改写成java的,算法一样所以就实现了前后台的加密。贴出来供大家参考。
 
脚本encrypt.js
 
var g_keyOut=new Array(768);
var g_ip=new Array(   //��ʼ�û�ip
  58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7
);
var g_invip=new Array(  //���ʼ�û�ip
  40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25
);
var g_e=new Array(   //e ѡλ��
  32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,31
);
var g_p=new Array(   //p ѡλ��
  16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25
);
var g_s=new Array(   //8��s��
  14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,
  15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,
  10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,
  7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,
  2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,
  12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,
  4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,
  13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11
);
 
function InitKey(str_Key)
{
 var pc1=new Array(  //��64bit��Կ�����û�Ϊ56λ
   57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4
 );
 var pc2=new Array(  //�Ծ�����λ�õ���64bitѡλ�õ�48λ��Կ
   14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32
 );
 var nls=new Array(1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1);
 var b_array_key = new Array(64);
 for(n=i=0;i<8;i++)
  b_array_key[n++]=str_Key.charCodeAt(i)>>i&0x01;  //��ö�����
 var cd=new Array(56);
 var c=new Array(28);
 var d=new Array(28);
 for(i=0;i<56;i++)
  cd[i]=b_array_key[pc1[i]-1];
 for(i=0;i<28;i++){
  c[i]=cd[i];
  d[i]=cd[i+28];  //����c,d
 }
 for(cnt=0;cnt<16;cnt++){
  for(i=0;i<nls[cnt];i++){
   c=lshift(c);
   d=lshift(d);
  }
  for(i=0;i<28;i++){
   cd[i]=c[i];
   cd[28+i]=d[i];
  }
  for(i=0;i<48;i++){
   g_keyOut[cnt*48+i]=cd[pc2[i]-1];
  }
 }
}
function lshift(p_Array)  //ѭ������һλ
{
 var tmp_Array=new Array(28);
 for(i=0;i<27;i++) tmp_Array[i]=p_Array[i+1];
 tmp_Array[27]=p_Array[0];
 return tmp_Array;
}
function frk(p_array_r,cnt)
{
 var b_array_fout=new Array(32);
 var b_array_expand=new Array(48);
 var array_pout=new Array(48);
 if(cnt==2)
 for(i=0;i<p_array_r.length;i++){
   //document.writeln(p_array_r[i]);
 }
 for(i=0;i<48;i++){  //��32λת��Ϊ48λ
  //if(cnt==2)
    //document.writeln(p_array_r[g_e[i]-1]);
  b_array_expand[i]=p_array_r[g_e[i]-1];
 }
 var b_array_dor = new Array(48);
 for(i=0;i<48;i++){  //������Կki��λ���8��ÿ��6bit
 //if(cnt==2)
  //document.writeln(g_keyOut[cnt*48+i]);
 var be;
 if(g_keyOut[cnt*48+i]){
    be= g_keyOut[cnt*48+i];
   }
   else{
    be= 0;
   }
  b_array_dor[i]= b_array_expand[i]^be;
 

 }
 for(scnt=n=0;scnt<8;scnt++){
  row=(b_array_dor[scnt*6+0]<<1)+b_array_dor[scnt*6+5];
  col=(b_array_dor[scnt*6+1]<<3)+(b_array_dor[scnt*6+2]<<2)+(b_array_dor[scnt*6+3]<<1)+b_array_dor[scnt*6+4]
  var sout=new Array(8);
  sout[scnt]=g_s[scnt*64+(row<<4)+col];
  for(i=3;i>=0;i--){
   array_pout[n]=sout[scnt]>>i;
   sout[scnt]=sout[scnt]-(array_pout[n++]<<i);
  }
 }
 for(i=0;i<32;i++){
  b_array_fout[i]=array_pout[g_p[i]-1];
  //if(cnt==2)
  //document.writeln(b_array_fout[i]);
  }
 return b_array_fout;
}
function Des_EnCrypt(str_input)                    //����
{
//  InitKey("454554454");   //only test , here
 var b_array_input = new Array(64);
 var b_array_lr = new Array(64);
 var b_array_l = new Array(32);
 var b_array_r = new Array(32);
 var b_array_fn = new Array(32);
 for(n=i=0;i<8;i++)
  for(j=0;j<8;j++) {
   //alert(str_input.charCodeAt(i));
   b_array_input[n++]=str_input.charCodeAt(i)>>j&0x01;  //��ö�����
   //alert(str_input.charCodeAt(i)>>j&0x01);
   }
 for(i=0;i<64;i++){
  b_array_lr[i]=b_array_input[g_ip[i]-1];
  if(i<32){ b_array_l[i] =  b_array_lr[i];
  }
  else { b_array_r[i-32] = b_array_lr[i];
  }   //����l,r
 }
 for(cnt=0;cnt<16;cnt++)
 {
  b_array_fn=frk(b_array_r,cnt);
  for(i=0;i<32;i++){
   //document.writeln(b_array_fn[i]);
   j=b_array_r[i];
   b_array_r[i]=b_array_l[i]^b_array_fn[i];
   b_array_l[i]=j;
   //document.writeln(j);
   //alert(b_array_r[i]);
  }
 }
 for(i=0;i<32;i++){
  b_array_lr[i]=b_array_r[i];
  b_array_lr[i+32]=b_array_l[i];
  //document.writeln(b_array_r[i]);
 }
 var fout=new Array(64);
 for(i=0;i<64;i++) {fout[i]=b_array_lr[g_invip[i]-1];
 //document.writeln(b_array_lr[i]);
 }
 var strout="";
 for(i=0;i<8;i++){
  sum=0;
  for(j=0;j<8;j++){
   //document.writeln(fout[i*8+j]<<j);
   sum+=(fout[i*8+j]<<j);
  // document.writeln(sum);
  }
  //alert(String.fromCharCode(sum));
  strout+=String.fromCharCode(sum);
  //document.write(String.fromCharCode(sum));
 }
 return strout;
}
function Des_deCrypt(str_input)  //����
{
 var b_array_input = new Array(64);
 var b_array_lr = new Array(64);
 var b_array_l = new Array(32);
 var b_array_r = new Array(32);
 var b_array_fn = new Array(32);
 for(n=i=0;i<8;i++)
  for(j=0;j<8;j++)
   b_array_input[n++]=str_input.charCodeAt(i)>>j&0x01;  //��ö�����
 for(i=0;i<64;i++){
  b_array_lr[i]=b_array_input[g_ip[i]-1];
  if(i<32) b_array_l[i] =  b_array_lr[i];
  else  b_array_r[i-32] = b_array_lr[i];   //����l,r
 }
 for(cnt=15;cnt>=0;cnt--)
 {
  b_array_fn=frk(b_array_r,cnt);
  for(i=0;i<32;i++){
   j=b_array_r[i];
   b_array_r[i]=b_array_l[i]^b_array_fn[i];
   b_array_l[i]=j;
  }
 }
 for(i=0;i<32;i++){
  b_array_lr[i]=b_array_r[i];
  b_array_lr[i+32]=b_array_l[i];
 }
 var fout=new Array(64);
 for(i=0;i<64;i++) fout[i]=b_array_lr[g_invip[i]-1];
 var strout="";
 for(i=0;i<8;i++){
  sum=0;
  for(j=0;j<8;j++){
   sum+=(fout[i*8+j]<<j);
  }
  strout+=String.fromCharCode(sum);
 }
 return strout;
}
// Test
//document.write ('<br>'+Des_EnCrypt('12345678'));
//document.write ('<br>'+Des_deCrypt(Des_EnCrypt('1')));
// Test
 
java版 Ecrypt.java
 
public class Encrypt {
    public Encrypt() {
    }
    int[] g_ip = new int[] { //初始置换ip
                  58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
                  62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
                  57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
                  61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
    };
    int[] g_invip = new int[] { //逆初始置换ip
                     40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63,
                     31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21,
                     61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51,
                     19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9,
                     49, 17, 57, 25
    };
    int[] g_e = new int[] { //e 选位表
                 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12,
                 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24,
                 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 31
    };
    int[] g_p = new int[] { //p 选位表
                 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2,
                 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25
    };
    int[] g_s = new int[] { //8个s合
                 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7,
                 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6,
                 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5,
                 11, 3, 14, 10, 0, 6, 13,
                 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4,
                 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10,
                 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2,
                 11, 6, 7, 12, 0, 5, 14, 9,
                 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0,
                 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15,
                 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4,
                 15, 14, 3, 11, 5, 2, 12,
                 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 13, 8,
                 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 10, 6, 9, 0, 12,
                 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8,
                 9, 4, 5, 11, 12, 7, 2, 14,
                 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 14, 11,
                 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10,
                 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2,
                 13, 6, 15, 0, 9, 10, 4, 5, 3,
                 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 10, 15,
                 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2,
                 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10,
                 11, 14, 1, 7, 6, 0, 8, 13,
                 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 13, 0,
                 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13,
                 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10,
                 7, 9, 5, 0, 15, 14, 2, 3, 12,
                 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15,
                 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9,
                 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8,
                 13, 15, 12, 9, 0, 3, 5, 6, 11
    };
    int[] g_keyOut = new int[768];
    public void InitKey(String str_Key) {
        int i, n;
        int[] pc1 = new int[] { //对64bit密钥进行置换为56位
                     57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10,
                     2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55,
                     47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61,
                     53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4
        };
        int[] pc2 = new int[] { //对经过移位得到的64bit选位得到48位密钥
                     14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4,
                     26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30,
                     40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36,
                     29, 32
        };
        int[] nls = new int[] {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
        int[] b_array_key = new int[64];
        char s = 's';
        for (n = i = 0; i < 8; i++) {
            int bt1 = (int) str_Key.charAt(i);
            bt1 >>= i;
            bt1 &= 0x01;
            b_array_key[n++] = bt1; //获得二进制
        }
        int[] cd = new int[56];
        int[] c = new int[28];
        int[] d = new int[28];
        for (i = 0; i < 56; i++) {
            cd[i] = b_array_key[pc1[i] - 1];
        }
        for (i = 0; i < 28; i++) {
            c[i] = cd[i];
            d[i] = cd[i + 28]; //分离c,d
        }
        for (int cnt = 0; cnt < 16; cnt++) {
            for (i = 0; i < nls[cnt]; i++) {
                c = lshift(c);
                d = lshift(d);
            }
            for (i = 0; i < 28; i++) {
                cd[i] = c[i];
                cd[28 + i] = d[i];
            }
            for (i = 0; i < 48; i++) {
                g_keyOut[cnt * 48 + i] = cd[pc2[i] - 1];
            }
        }
    }

    public int[] lshift(int[] p_Array) { //循环左移一位
        int[] tmp_Array = new int[28];
        for (int i = 0; i < 27; i++) {
            tmp_Array[i] = p_Array[i + 1];
        }
        tmp_Array[27] = p_Array[0];
        return tmp_Array;
    }
    public int[] frk(int[] p_array_r, int cnt) {
        int i, scnt, n;
        int[] b_array_fout = new int[32];
        int[] b_array_expand = new int[48];
        int[] array_pout = new int[48];
        if(cnt==2)
            for(i=0;i<p_array_r.length;i++){
                //System.out.print(p_array_r[i]);
            }
        for (i = 0; i < 48; i++) { //将32位转换为48位
            //if(cnt==2)
             //System.out.print(p_array_r[g_e[i] - 1]);
            b_array_expand[i] = p_array_r[g_e[i] - 1];
        }
        int[] b_array_dor = new int[48];
        for (i = 0; i < 48; i++) { //再与密钥ki按位异或,8组,每组6bit
            int be = b_array_expand[i];
            //if(cnt==2)
            // System.out.print(be);
            int be2 = g_keyOut[cnt * 48 + i];
            be ^= be2;
            //if(cnt==2)
             //System.out.print(be2);
            b_array_dor[i] = be;
            //if(cnt==2)
             //System.out.print(b_array_dor[i]);
        }
        for (scnt = n = 0; scnt < 8; scnt++) {
            int bdor = b_array_dor[scnt * 6 + 0];
            bdor <<= 1;
            int bdor2 = b_array_dor[scnt * 6 + 5];
            bdor += bdor2;
            int colbt1 = b_array_dor[scnt * 6 + 1];
            int colbt2 = b_array_dor[scnt * 6 + 2];
            int colbt3 = b_array_dor[scnt * 6 + 3];
            int colbt4 = b_array_dor[scnt * 6 + 4];
            colbt1 <<= 3;
            colbt2 <<= 2;
            colbt3 <<= 1;
            colbt1 += colbt2;
            colbt1 += colbt3;
            colbt1 += colbt4;
            int row = bdor;
            int col = colbt1;
            int[] sout = new int[8];
            sout[scnt] = g_s[scnt * 64 + (row << 4) + col];
            for (i = 3; i >= 0; i--) {
                int soutb = sout[scnt];
                soutb >>= i;
                array_pout[n] = soutb;
                int poutb = array_pout[n++];
                poutb <<= i;
                sout[scnt] -= poutb;
            }
        }
        for (i = 0; i < 32; i++) {
            b_array_fout[i] = array_pout[g_p[i] - 1];
            //if(cnt==2)
              //  System.out.print(b_array_fout[i]);
        }
        return b_array_fout;
    }
    public String Des_EnCrypt(String str_input) { //加密
//  InitKey("454554454");   //only test , here
        int n, i, j,sum;
       // int sum;
        String strout = "";
        int[] b_array_input = new int[64];
        int[] b_array_lr = new int[64];
        int[] b_array_l = new int[32];
        int[] b_array_r = new int[32];
        int[] b_array_fn = new int[32];
        for (n = i = 0; i < 8; i++) {
            for (j = 0; j < 8; j++) {
                int bt1=0;
                if(i<str_input.length()){
                    bt1 = (int) str_input.charAt(i);
                }else{
                    bt1=0;
                }
                //System.out.println(bt1);
                bt1 >>= j;
                bt1 &= 0x01;
                b_array_input[n++] = bt1;
                //获得二进制
            }
        }
        for (i = 0; i < 64; i++) {
            b_array_lr[i] = b_array_input[g_ip[i] - 1];
            if (i < 32) {
                b_array_l[i] = b_array_lr[i];
            } else {
                b_array_r[i - 32] = b_array_lr[i]; //分离l,r
            }
        }

        for (int cnt = 0; cnt < 16; cnt++) {
            b_array_fn = frk(b_array_r, cnt);
            for (i = 0; i < 32; i++) {
                //System.out.print(b_array_fn[i]);
                int bj = b_array_r[i];
                int aryl = b_array_l[i];
                int aryfn = b_array_fn[i];
                aryl ^= aryfn;
                b_array_r[i] = aryl;
                b_array_l[i] = bj;
                //System.out.print(bj);
                //System.out.println(aryfn);
            }
        }
        for (i = 0; i < 32; i++) {
            b_array_lr[i] = b_array_r[i];
            b_array_lr[i + 32] = b_array_l[i];
            //System.out.print(b_array_r[i]);
        }
        int[] fout = new int[64];
        for (i = 0; i < 64; i++) {
            fout[i] = b_array_lr[g_invip[i] - 1];
            //System.out.print(b_array_lr[i]);
            //System.out.print(fout[i]);
        }
        for (i = 0; i < 8; i++) {
            sum = 0;
            for (j = 0; j < 8; j++) {
                int foutb = fout[i * 8 + j];
                foutb <<= j;
                //System.out.print(foutb);
                sum += foutb;
                //System.out.println(sum);
            }

            strout += (char)sum;
            sum=0;
            //System.out.println(sum);
            //document.write(String.fromCharCode(sum));
        }
        return strout;
    }
    public String Des_deCrypt(String str_input) { //解密
        int n, i, j, cnt;
        int sum;
        String strout = "";
        int[] b_array_input = new int[64];
        int[] b_array_lr = new int[64];
        int[] b_array_l = new int[32];
        int[] b_array_r = new int[32];
        int[] b_array_fn = new int[32];
        for (n = i = 0; i < 8; i++) {
            for (j = 0; j < 8; j++) {
                int bt1 = (int) str_input.charAt(i);
                bt1 >>= j;
                bt1 &= 0x01;
                b_array_input[n++] = bt1;
                //获得二进制
            }
        }
        for (i = 0; i < 64; i++) {
            b_array_lr[i] = b_array_input[g_ip[i] - 1];
            if (i < 32) {
                b_array_l[i] = b_array_lr[i];
            } else {
                b_array_r[i - 32] = b_array_lr[i]; //分离l,r
            }
        }
        for (cnt = 15; cnt >= 0; cnt--) {
            b_array_fn = frk(b_array_r, cnt);
            for (i = 0; i < 32; i++) {
                int bj = b_array_r[i];
                int aryl = b_array_l[i];
                int aryfn = b_array_fn[i];
                aryl ^= aryfn;
                b_array_r[i] = aryl;
                b_array_l[i] = bj;
            }
        }
        for (i = 0; i < 32; i++) {
            b_array_lr[i] = b_array_r[i];
            b_array_lr[i + 32] = b_array_l[i];
        }
        int[] fout = new int[64];
        for (i = 0; i < 64; i++) {
            fout[i] = b_array_lr[g_invip[i] - 1];
        }
        for (i = 0; i < 8; i++) {
            sum = 0;
            for (j = 0; j < 8; j++) {
                sum += (fout[i * 8 + j] << j);
            }
            //System.out.println();
            strout += (char)sum;
        }
        return strout;
    }
}

你可能感兴趣的:(网络,职场,休闲)