專案要求對資料傳輸進行加密,即在客戶端未提交的時候進行加密,到後臺伺服器端進行解密,也就是要求用指令碼加密,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;
    }
}