⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.java

📁 DES加密算法 早期的源代码  本人觉得对初学者很有用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        temp[11] = (byte)binary[3+valindex];
        valindex = s4[2*ER[18]+ER[23]][2*(2*(2*ER[19]+ER[20])+ER[21])+ER[22]];
        valindex = valindex = valindex * 4;
        temp[12] = (byte)binary[0+valindex];
        temp[13] = (byte)binary[1+valindex];
        temp[14] = (byte)binary[2+valindex];
        temp[15] = (byte)binary[3+valindex];
        valindex = s5[2*ER[24]+ER[29]][2*(2*(2*ER[25]+ER[26])+ER[27])+ER[28]];
        valindex = valindex = valindex * 4;
        temp[16] = (byte)binary[0+valindex];
        temp[17] = (byte)binary[1+valindex];
        temp[18] = (byte)binary[2+valindex];
        temp[19] = (byte)binary[3+valindex];
        valindex = s6[2*ER[30]+ER[35]][2*(2*(2*ER[31]+ER[32])+ ER[33])+ER[34]];
        valindex = valindex = valindex * 4;
        temp[20] = (byte)binary[0+valindex];
        temp[21] = (byte)binary[1+valindex];
        temp[22] = (byte)binary[2+valindex];
        temp[23] = (byte)binary[3+valindex];
        valindex = s7[2*ER[36]+ER[41]][2*(2*(2*ER[37]+ER[38])+ ER[39])+ER[40]];
        valindex = valindex = valindex * 4;
        temp[24] = (byte)binary[0+valindex];
        temp[25] = (byte)binary[1+valindex];
        temp[26] = (byte)binary[2+valindex];
        temp[27] = (byte)binary[3+valindex];
        valindex = s8[2*ER[42]+ER[47]][2*(2*(2*ER[43]+ER[44])+ ER[45])+ER[46]];
        valindex = valindex = valindex * 4;
        temp[28] = (byte)binary[0+valindex];
        temp[29] = (byte)binary[1+valindex];
        temp[30] = (byte)binary[2+valindex];
        temp[31] = (byte)binary[3+valindex];
  }
  protected void p(){
        /* Permute - P */
        Rn[ 0] = temp[15];
        Rn[ 1] = temp[ 6];
        Rn[ 2] = temp[19];
        Rn[ 3] = temp[20];
        Rn[ 4] = temp[28];
        Rn[ 5] = temp[11];
        Rn[ 6] = temp[27];
        Rn[ 7] = temp[16];
        Rn[ 8] = temp[ 0];
        Rn[ 9] = temp[14];
        Rn[10] = temp[22];
        Rn[11] = temp[25];
        Rn[12] = temp[ 4];
        Rn[13] = temp[17];
        Rn[14] = temp[30];
        Rn[15] = temp[ 9];
        Rn[16] = temp[ 1];
        Rn[17] = temp[ 7];
        Rn[18] = temp[23];
        Rn[19] = temp[13];
        Rn[20] = temp[31];
        Rn[21] = temp[26];
        Rn[22] = temp[ 2];
        Rn[23] = temp[ 8];
        Rn[24] = temp[18];
        Rn[25] = temp[12];
        Rn[26] = temp[29];
        Rn[27] = temp[ 5];
        Rn[28] = temp[21];
        Rn[29] = temp[10];
        Rn[30] = temp[ 3];
        Rn[31] = temp[24];
  }
  protected void IIP(){
        /* 初始逆置换 */
        output[ 0] = bufout[39];
        output[ 1] = bufout[ 7];
        output[ 2] = bufout[47];
        output[ 3] = bufout[15];
        output[ 4] = bufout[55];
        output[ 5] = bufout[23];
        output[ 6] = bufout[63];
        output[ 7] = bufout[31];
        output[ 8] = bufout[38];
        output[ 9] = bufout[ 6];
        output[10] = bufout[46];
        output[11] = bufout[14];
        output[12] = bufout[54];
        output[13] = bufout[22];
        output[14] = bufout[62];
        output[15] = bufout[30];
        output[16] = bufout[37];
        output[17] = bufout[ 5];
        output[18] = bufout[45];
        output[19] = bufout[13];
        output[20] = bufout[53];
        output[21] = bufout[21];
        output[22] = bufout[61];
        output[23] = bufout[29];
        output[24] = bufout[36];
        output[25] = bufout[ 4];
        output[26] = bufout[44];
        output[27] = bufout[12];
        output[28] = bufout[52];
        output[29] = bufout[20];
        output[30] = bufout[60];
        output[31] = bufout[28];
        output[32] = bufout[35];
        output[33] = bufout[ 3];
        output[34] = bufout[43];
        output[35] = bufout[11];
        output[36] = bufout[51];
        output[37] = bufout[19];
        output[38] = bufout[59];
        output[39] = bufout[27];
        output[40] = bufout[34];
        output[41] = bufout[ 2];
        output[42] = bufout[42];
        output[43] = bufout[10];
        output[44] = bufout[50];
        output[45] = bufout[18];
        output[46] = bufout[58];
        output[47] = bufout[26];
        output[48] = bufout[33];
        output[49] = bufout[ 1];
        output[50] = bufout[41];
        output[51] = bufout[ 9];
        output[52] = bufout[49];
        output[53] = bufout[17];
        output[54] = bufout[57];
        output[55] = bufout[25];
        output[56] = bufout[32];
        output[57] = bufout[ 0];
        output[58] = bufout[40];
        output[59] = bufout[ 8];
        output[60] = bufout[48];
        output[61] = bufout[16];
        output[62] = bufout[56];
        output[63] = bufout[24];
  }

  public Des(String key){
        this.key=key;
        subKey=new SubKey(key);
  }

  //解密
  public String enc(String Srcdata,int readLen) {
        this.Srcdata=Srcdata;
        this.readLen=readLen;
        Char4Tobit64(Srcdata);
        IP();
        for (int i = 0; i<32; i++) {
                        Ln[i]=bufout[i];     // L0
                        Rn[i]=bufout[32+i];  //R0
        }
        for (int iter = 1; iter<17; iter++) {
                for (int i = 0; i<32; i++) {
                        LR[i]=Ln[i];
                        Ln[i]=Rn[i];
            }
                expand32To48bit(Rn);  //Rn-1 expand to 48 bit save to ER[]
                switch(iter){
                        case 1:
                                ki=subKey.k1; break;
                        case 2:
                                ki=subKey.k2; break;
                        case 3:
                                ki=subKey.k3; break;
                        case 4:
                                ki=subKey.k4; break;
                        case 5:
                                ki=subKey.k5; break;
                        case 6:
                                ki=subKey.k6; break;
                        case 7:
                                ki=subKey.k7; break;
                        case 8:
                                ki=subKey.k8; break;
                        case 9:
                               ki=subKey.k9; break;
                        case 10:
                                ki=subKey.k10; break;
                        case 11:
                                ki=subKey.k11; break;
                        case 12:
                               ki=subKey.k12; break;
                        case 13:
                                ki=subKey.k13; break;
                        case 14:
                                ki=subKey.k14; break;
                        case 15:
                                ki=subKey.k15; break;
                        case 16:
                                ki=subKey.k16; break;

                }

                XOR(ER,ki);
                sBox();
                p();
                XOR(Rn,LR);
        }

        for (int i = 0; i<32; i++) {
                bufout[i]=Rn[i];
                bufout[32+i]=Ln[i];
    }
    IIP();
    Bit64To4Char();
    return Tagdata;
   }
  //加密
  public String dec(String Srcdata,int readLen){
        this.Srcdata=Srcdata;
        this.readLen=readLen;
        Char4Tobit64(Srcdata);
        IP();
        for (int i = 0; i<32; i++) {
                        Ln[i]=bufout[i];     // L0
                        Rn[i]=bufout[32+i];  //R0
        }
        for (int iter = 1; iter<17; iter++) {
                for (int i = 0; i<32; i++) {
                        LR[i]=Ln[i];
                        Ln[i]=Rn[i];
            }
                expand32To48bit(Rn);
                //Rn-1 扩展到48bit并保存到ER[]
                switch(iter){
                        case 1:
                                ki=subKey.k16; break;
                        case 2:
                                ki=subKey.k15; break;
                        case 3:
                                ki=subKey.k14; break;
                        case 4:
                                ki=subKey.k13; break;
                        case 5:
                                ki=subKey.k12; break;
                        case 6:
                                ki=subKey.k11; break;
                        case 7:
                                ki=subKey.k10; break;
                        case 8:
                                ki=subKey.k9; break;
                        case 9:
                                ki=subKey.k8; break;
                        case 10:
                                ki=subKey.k7; break;
                        case 11:
                                ki=subKey.k6; break;
                        case 12:
                                ki=subKey.k5; break;
                        case 13:
                                ki=subKey.k4; break;
                        case 14:
                                ki=subKey.k3; break;
                        case 15:
                                ki=subKey.k2; break;
                        case 16:
                                ki=subKey.k1; break;

                }
                XOR(ER,ki);
                sBox();
                p();
                XOR(Rn,LR);

        }

        for (int i = 0; i<32; i++) {
                bufout[i]=Rn[i];
                bufout[32+i]=Ln[i];
    }
    IIP();
    Bit64To4Char();
    return Tagdata;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -