Red de conocimiento informático - Conocimiento informático - ¿Cuál es el resultado después de realizar diferentes operaciones OR en cada bit de la cadena 01 1001001?

¿Cuál es el resultado después de realizar diferentes operaciones OR en cada bit de la cadena 01 1001001?

I. Cifrado

El objeto de datos procesado por el algoritmo DES es una cadena de texto sin formato de 64 bits. Sea la cadena de texto plano m = m1m2...m64 (mi = 0 o 1). La cadena de texto plano se cifra con una clave K de 64 bits para generar un texto cifrado E de 64 bits. El proceso de cifrado es el siguiente:

Proceso de cifrado del algoritmo DES

El proceso de cifrado del algoritmo DES es el siguiente:

Reemplace la cadena de texto sin formato de 64 bits m por a cifrar es IP, y luego la lista de subíndices de la cadena de bits se obtiene de la siguiente manera:

IP 58 50 42 34 26 18 10 2

60 52 44 36 28 20 12 4

62 54 46 38 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

La broca La cadena se divide en dos partes, L0 de 32 bits y R0 de 32 bits. La subclave R0 K1 (la generación de la subclave se discutirá más adelante) se transforma mediante f (R0, K1) (la transformación f se discutirá a continuación) y se genera la cadena de bits de 32 bits f1, que es la operación de suma binaria del Bit L0. La suma binaria de L0 no implica redondeo. Las reglas operativas son:

f1 y L0 no se llevan después de la operación de suma binaria, el resultado se asigna a R1 y R0 se asigna al L1 original. Después de que L1 y R0 realicen exactamente la misma operación anterior, se generan L2, R2... y se genera **** después de 16 operaciones. Finalmente se generan R16 y L16. Entre ellos, R16 es L15, f (R15, K16) no avanza el resultado de la operación de suma binaria y L16 es la asignación directa de R15.

R16 y L16 se combinan en una cadena de 64 bits. Vale la pena señalar que R16 debe colocarse delante de L16. La lista de subíndices de la cadena de bits obtenida después de reemplazar R16 y L16 con IP-1 es la siguiente: La cadena de bits generada después de reemplazar IP-1 es el texto cifrado e.

La transformación f(Ri-1,Ki) se introducirá nuevamente a continuación.

Su función es convertir nuevamente la entrada de 32 bits en salida de 32 bits. El proceso se muestra en la figura:

La descripción de la transformación f es la siguiente: la entrada Ri-1 (32 bits) se expande a 48 bits después de la transformación E. La lista de índice de la cadena de bits expandida es la siguiente:

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

La cadena de bits expandida se divide en 8 grupos, cada grupo tiene 6 bits. Después de que cada grupo pasa por su propia S-box, vuelve a ser de 4 bits (consulte el proceso a continuación) y, después de fusionarse, vuelve a ser de 32 bits. La lista de subíndices es la siguiente:

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

p>

La salida de la cadena de bits después de la transformación P es f de 32 bits (Ri-1, Ki).

El proceso de transformación de S-box se presenta con más detalle a continuación. Elija cualquier S-box. Vea la imagen:

Ingrese b1, b2, b3, b4, b5, b6, calcule x=b1*2+b6, y=b5+b4*2+b3*4+b2*8, y luego, desde Encuentre el valor Sxy en la fila x y la columna y en la tabla Si y convierta Sxy a binario para obtener el resultado del cuadro Si. (La tabla S se muestra en la figura)

En este punto, se introduce el principio de cifrado del algoritmo DES. El código fuente del programa en VC++6.0 es:

for(i=1;i<=64;i++)

m1[i]=m[ip[i- 1 ]];// Entrada de cadena de texto sin formato de 64 bits, después del reemplazo de IP.

Próxima iteración. Dado que el método es el mismo para cada iteración, solo la entrada y la salida son diferentes, solo se proporciona una de ellas. Tome la octava vez como ejemplo: //Realice la octava iteración. Primero realice una operación S-box tomando una cadena de 32 bits como entrada.

for(i=1;i<=48;i++)//Extendido de 32 bits a 48 bits mediante transformación E

RE1[i]=R7[E[i - 1]];

for(i=1;i<=48;i++)//y K8 por bit para operación de suma no redondeada

RE1[i]= RE1[i ] +K8[i];

for(i=1;i<=48;i++)

{

si(RE1[i]== 2 )

RE1[i]=0;

}

for(i=1;i<7;i++)//48 bits se dividen en 8 Grupo

{

s11[i]=RE1[i]

s21[i]=RE1[i+6]; p>s31[i]=RE1[i+12];

s41[i]=RE1[i+18]

s51[i]=RE1[i+24] ];

s61[i]=RE1[i+30];

s71[i]=RE1[i+36]; ]=RE1[i+42];

}/// La siguiente operación atravesará el cuadro S y obtendrá 8 números.

s1,s2,s3,s4,s5,s6,s7,s8 son tablas S

s[1]=s1 [s11[6]+s11[1]*2][s11[5] +s11[4]*2+s11[3]*4+s11[2]*8]

s[2]=s2[s21[6]+s21[1]*2][ s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];

s[3 ]=s3[s31[6]+s31[1] *2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];

s[4]=s4[s41[6]+ s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8]; [6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];

s[6] =s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8]

s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];

s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8 ] ;

for(i=0;i<8;i++)//8 conversión digital de salida binaria

{

for(j=1;j< 5;j++)

{

temp[j]=s[i+1]%2

s[i+1]=s[i; +1]/2;

}

for(j=1;j<5;j++)

f[4*i+ j ]=temperatura[5-j];

}