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

📄 i_p_lab4view.java

📁 DES encrypting algorithm
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
   //конечная перестановка matr_kon=new int [8][8];  int i1=3; int j1=3; for (int i=0; i<8; i=i+2) {  j1=3;     for (int j=0; j<8; j=j+2)      {matr_kon[i][j]=matr_nach[i1][j1];       matr_kon[i][j+1]=matr_nach[i1][j1+4];    //   System.out.println(j1);       j1--;        } i1--; }  i1=7; j1=3; for (int i=1; i<8; i=i+2) {  j1=3;     for (int j=0; j<8; j=j+2)      {matr_kon[i][j]=matr_nach[i1][j1];       matr_kon[i][j+1]=matr_nach[i1][j1+4];       j1--;        } i1--; }     System.out.println ("конечная перестановка");for (int i=0; i<8; i++)       {   for (int j=0; j<8; j++)            {System.out.print(matr_kon[i][j]);             System.out.print(" ");}            System.out.println();}     //функции преобразования S(i)  l_m_s = new ArrayList(); for (int i=0; i<8; i++) {System.out.println("s("+i+")"); l_m_s.add(get_S()); }  //функция перестановки P p=new int [8][4]; p[0][0]=16; p[0][1]=7; p[0][2]=20; p[0][3]=21;    p[1][0]=29;    p[1][1]=12;    p[1][2]=28;    p[1][3]=17;           p[2][0]=1;        p[2][1]=15;        p[2][2]=23;        p[2][3]=26;            p[3][0]=5;            p[3][1]=18;            p[3][2]=31;            p[3][3]=10;                 p[4][0]=2;                 p[4][1]=8;                 p[4][2]=24;                 p[4][3]=14;                      p[5][0]=32;                      p[5][1]=27;                      p[5][2]=3;                      p[5][3]=9;                           p[6][0]=19;                           p[6][1]=13;                           p[6][2]=30;                           p[6][3]=6;                              p[7][0]=22;                              p[7][1]=11;                              p[7][2]=4;                              p[7][3]=25;  System.out.println ("функция перестановки Р");     for (int i=0; i<8; i++)       {   for (int j=0; j<4; j++)            {System.out.print(p[i][j]);             System.out.print(" ");}            System.out.println();}    //функция перестановки и выбора последовательности В   b=new int [8][7]; b[0][0]=57; b[0][1]=49; b[0][2]=41; b[0][3]=33; b[0][4]=25; b[0][5]=17; b[0][6]=9;     b[1][0]=1;     b[1][1]=58;     b[1][2]=50;     b[1][3]=42;     b[1][4]=34;     b[1][5]=26;     b[1][6]=18;         b[2][0]=10;         b[2][1]=2;         b[2][2]=59;         b[2][3]=51;         b[2][4]=43;         b[2][5]=35;         b[2][6]=27;             b[3][0]=19;             b[3][1]=11;             b[3][2]=3;             b[3][3]=60;             b[3][4]=52;             b[3][5]=44;             b[3][6]=36;                 b[4][0]=63;                 b[4][1]=55;                 b[4][2]=47;                 b[4][3]=39;                 b[4][4]=31;                 b[4][5]=23;                 b[4][6]=15;                     b[5][0]=7;                     b[5][1]=62;                     b[5][2]=54;                     b[5][3]=46;                     b[5][4]=38;                     b[5][5]=30;                     b[5][6]=22;                         b[6][0]=14;                         b[6][1]=6;                         b[6][2]=61;                         b[6][3]=53;                         b[6][4]=45;                         b[6][5]=37;                         b[6][6]=29;                             b[7][0]=21;                             b[7][1]=13;                             b[7][2]=5;                             b[7][3]=28;                             b[7][4]=20;                             b[7][5]=12;                             b[7][6]=4;                               System.out.println ("функция перестановки B");     for (int i=0; i<8; i++)       {   for (int j=0; j<7; j++)            {System.out.print(b[i][j]);             System.out.print(" ");}            System.out.println();}   //функция перестановки и выбора К k=new int [8][6]; k[0][0]=14; k[0][1]=17; k[0][2]=11; k[0][3]=24; k[0][4]=1; k[0][5]=5;     k[1][0]=3;     k[1][1]=28;     k[1][2]=15;     k[1][3]=6;     k[1][4]=21;     k[1][5]=10;         k[2][0]=23;         k[2][1]=19;         k[2][2]=12;         k[2][3]=4;         k[2][4]=26;         k[2][5]=8;             k[3][0]=16;             k[3][1]=7;             k[3][2]=27;             k[3][3]=20;             k[3][4]=13;             k[3][5]=2;                 k[4][0]=41;                 k[4][1]=52;                 k[4][2]=31;                 k[4][3]=37;                 k[4][4]=47;                 k[4][5]=55;                     k[5][0]=30;                     k[5][1]=40;                     k[5][2]=51;                     k[5][3]=45;                     k[5][4]=33;                     k[5][5]=48;                         k[6][0]=44;                         k[6][1]=49;                         k[6][2]=39;                         k[6][3]=56;                         k[6][4]=34;                         k[6][5]=53;                             k[7][0]=46;                             k[7][1]=42;                             k[7][2]=50;                             k[7][3]=36;                             k[7][4]=29;                             k[7][5]=32;                              System.out.println ("функция перестановки K");     for (int i=0; i<8; i++)       {   for (int j=0; j<6; j++)            {System.out.print(k[i][j]);             System.out.print(" ");}            System.out.println();}            //функция сдвига Si si=new int [16]; si[0]=1; si[1]=1; si[2]=2; si[3]=2; si[4]=2; si[5]=2; si[6]=2; si[7]=2; si[8]=1; si[9]=2; si[10]=2; si[11]=2; si[12]=2; si[13]=2; si[14]=2; si[15]=1;   //---------------------------шифрование----------------------------------------  rezultat1="";  System.out.println ("---------------------------количество итерация="+strk_bin.length()/64);   int predel=strk_bin.length()/64; for (int time=0; time<predel;time++) { //заполнение матрицы начальной перестановки битамиString strochka=strk_bin.substring(0, 64);strk_bin=strk_bin.substring(64, strk_bin.length());matr=new String [8][8];for (int k1=1; k1<65; k1++)    for (int i=0; i<8; i++)        for (int j=0; j<8; j++)            if (matr_nach[i][j]==k1)            matr[i][j]=strochka.substring(k1-1, k1);    /*System.out.println ("64 бита входной последовательности");for (int i=0; i<8; i++)       {   for (int j=0; j<8; j++)            {System.out.print(matr[i][j]);             System.out.print(" ");}            System.out.println();}*/              //разделение на две последовательности L(0) и R(0)     String L="", L1="";    String R="";   for (int i=0; i<4; i++)          for (int j=0; j<8; j++)            L=L+matr[i][j];   for (int i=4; i<8; i++)          for (int j=0; j<8; j++)            R=R+matr[i][j];   System.out.println ("последовательность L "+L);  System.out.println ("последовательность R "+R);    L1=R;  //заполнение матрицы расширения битами String matr_e[][];matr_e=new String[8][6];for (int k1=1; k1<=R.length(); k1++)    for (int i=0; i<8; i++)        for (int j=0; j<6; j++)            if (ras[i][j]==k1)            matr_e[i][j]=R.substring(k1-1, k1);/*System.out.println ("матрица расширения");for (int i=0; i<8; i++)       {   for (int j=0; j<6; j++)            {System.out.print(matr_e[i][j]);             System.out.print(" ");}            System.out.println();}*/R="";  for (int i=0; i<8; i++)          for (int j=0; j<6; j++)            R=R+matr_e[i][j];   System.out.println ("последовательность R "+R);      //заполнение матрицы В битами   String matr_b[][];matr_b=new String[8][7];for (int k1=1; k1<=key.length(); k1++)    for (int i=0; i<8; i++)        for (int j=0; j<7; j++)            if (b[i][j]==k1)            matr_b[i][j]=key.substring(k1-1, k1);   C="";D="";//создание последовательностей C и D   for (int i=0; i<4; i++)        for (int j=0; j<7; j++)           C=C+matr_b[i][j];  for (int i=4; i<8; i++)        for (int j=0; j<7; j++)           D=D+matr_b[i][j];System.out.println ("последовательность C "+C);System.out.println ("последовательность D "+D);//сдвиг C=Sdvig(C);D=Sdvig(D);String CD="";CD=C+D;   //заполнение матрицы K битами   String matr_k[][];matr_k=new String[8][7];for (int k1=1; k1<=CD.length(); k1++)    for (int i=0; i<8; i++)        for (int j=0; j<6; j++)            if (k[i][j]==k1)            matr_k[i][j]=CD.substring(k1-1, k1);//создание последовательностей C1D1String C1D1="";   for (int i=0; i<8; i++)        for (int j=0; j<6; j++)           C1D1=C1D1+matr_k[i][j];System.out.println ("последовательность C1D1 "+C1D1);int xor=0;String sum="";for (int i=0; i<R.length();i++){   xor=Integer.parseInt(R.substring(i, i+1))^Integer.parseInt(C1D1.substring(i, i+1));    sum=sum+xor;}System.out.println ("последовательность sum(xor) "+sum);//преобразования с использованием матриц SString preobr="";for (int i=0; i<8; i++){ int m[][];  m=new int [4][16];   m=(int[][])l_m_s.get(i);  //System.out.println ("последовательность "+sum.substring(0, 6)); // System.out.println ("матрица S "+sum.substring(0, 6));    String st="";  st=sum.substring(0, 1);  st=st+sum.substring(5, 6);    int nom_st=ConvertToDec (st);  //System.out.println ("nom_st "+nom_st);  int kol=ConvertToDec (sum.substring(1, 5));  //System.out.println ("kol "+kol);  String chast=""; // System.out.println ("m "+m[nom_st][kol]);  chast=Integer.toBinaryString(m[nom_st][kol]);  if (chast.length()<4)      for (int j=0; j<=4-chast.length(); j++)          chast="0"+chast;    if (chast.length()<4)           chast="0"+chast;   // System.out.println ("chast "+chast);  preobr=preobr+chast;  sum=sum.substring(6, sum.length());}System.out.println ("последовательность preobr "+preobr);//заполнение битами функции перестановки Р   String matr_p[][];matr_p=new String[8][4];for (int k1=1; k1<=preobr.length(); k1++)    for (int i=0; i<8; i++)        for (int j=0; j<4; j++)            if (p[i][j]==k1)            matr_p[i][j]=preobr.substring(k1-1, k1);//результат функции шифрованияString shifr="";for (int i=0; i<8; i++)        for (int j=0; j<4; j++)            shifr=shifr+matr_p[i][j];R="";for (int i=0; i<shifr.length();i++){   xor=Integer.parseInt(shifr.substring(i, i+1))^Integer.parseInt(L.substring(i, i+1));    R=R+xor;}L=L1;System.out.println ("последовательность L "+L);System.out.println ("последовательность R "+R);//цикл шифрования---------------------------------------------------------------for (int t=1; t<16; t++){    System.out.println ();    System.out.println ("-------- итерация -------- t= "+t);    System.out.println ();          //заполнение матрицы расширения битами L1=R;matr_e=new String[8][6];

⌨️ 快捷键说明

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