📄 i_p_lab4view.java
字号:
//конечная перестановка 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 + -